ASP.NET Core 中的 OAuth 授权服务

Posted

技术标签:

【中文标题】ASP.NET Core 中的 OAuth 授权服务【英文标题】:OAuth Authorization Service in ASP.NET Core 【发布时间】:2015-05-17 07:22:21 【问题描述】:

在 Web API 2 中,您曾经能够通过如下中间件设置 OAuth 授权服务器来创建端点以发出令牌:

//Set up our auth server options.
var OAuthServerOptions = new OAuthAuthorizationServerOptions()
            
                AllowInsecureHttp = true,
                TokenEndpointPath = new PathString("/token"),
                AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
                Provider = new SimpleAuthorizationServerProvider()
            ;

 // Sets up the token issue endpoint using the options above
 app.UseOAuthAuthorizationServer(OAuthServerOptions);

也许我错过了它,但我正试图弄清楚如何在 ASP.NET Core 中执行此操作。我查看了源代码 (https://github.com/aspnet/Security),但我真的没有看到任何类似的东西。有没有一种新的方法可以做到这一点?我需要自己创建一个控制器并自己做吗?

我了解如何通过中间件设置 OAuth 身份验证,但这涉及我从 API 发出声明的授权部分。

【问题讨论】:

也许这会有所帮助。这是 thinktecture 身份服务器的答案:***.com/questions/29360563/… 感谢@CedricDumont,我一直在寻找集成的东西,但我考虑过 Thinktecture。一天结束,这可能是我的选择。它非常坚固。 【参考方案1】:

编辑 (01/28/2021):作为 3.0 更新的一部分,AspNet.Security.OpenIdConnect.Server 已合并到 OpenIddict。要开始使用 OpenIddict,请访问 documentation.openiddict.com。


不要浪费时间在 ASP.NET Core 中寻找 OAuthAuthorizationServerMiddleware 替代方案,ASP.NET 团队只是决定不移植它:https://github.com/aspnet/Security/issues/83

我建议查看 AspNet.Security.OpenIdConnect.Server,它是 Katana 3 附带的 OAuth2 授权服务器中间件的高级分支:有一个 OWIN/Katana 3 版本和一个 ASP .NET Core 版本,同时支持完整的 .NET 框架和 .NET Core。

https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server

ASP.NET Core 1.x:

app.UseOpenIdConnectServer(options =>

    options.AllowInsecureHttp = true;
    options.TokenEndpointPath = new PathString("/token");
    options.AccessTokenLifetime = TimeSpan.FromDays(1);
    options.TokenEndpointPath = "/token";
    options.Provider = new SimpleAuthorizationServerProvider();
);

ASP.NET Core 2.x:

services.AddAuthentication().AddOpenIdConnectServer(options =>

    options.AllowInsecureHttp = true;
    options.TokenEndpointPath = new PathString("/token");
    options.AccessTokenLifetime = TimeSpan.FromDays(1);
    options.TokenEndpointPath = "/token";
    options.Provider = new SimpleAuthorizationServerProvider();
);

要了解有关此项目的更多信息,我建议阅读http://kevinchalet.com/2016/07/13/creating-your-own-openid-connect-server-with-asos-introduction/。

祝你好运!

【讨论】:

这真的是我一直在寻找的......也许这个问题会帮助其他人找到这个项目。感谢那些致力于此的人! 不客气!它仍然是一个年轻的项目,但我希望尽快在 NuGet.org 上发布一个 RC 版本(我仍然需要在 vNext 版本中引入一些破坏性分支,我还想向后移植到 OWIN/Katana 3,所以它可能需要再过几个星期)。如果您有任何问题或想要分享您的反馈,请随时在 GitHub 或 JabbR 上联系我 ;) @Pinpoint,你在那里做了一些令人印象深刻的工作!我设法使用默认包构建了一个令牌提供程序,并在此处详细说明:***.com/a/29698502/195653,但我觉得 OpenIdConnect 服务器可能是更好的选择! 较早的问题,但您可能还想查看 IdentityServer4 - 它刚刚进入 Asp.Net Core leastprivilege.com/2016/01/11/… 的测试版 我可以在 .NET core 2.0 中实现相同的功能吗,我尝试过但收到错误 TypeLoadException: Could not load type 'Microsoft.AspNetCore.Builder.AuthenticationOptions' from assembly 'Microsoft.AspNetCore.Authentication, Version= 2.0.0.0,文化=中性,PublicKeyToken=adb9793829ddae60'。【参考方案2】:

对于仍在 ASP.NET 5 中寻找原始 OAuth 授权服务器的任何人,我已将代码和原始示例移植到此处: https://github.com/XacronDevelopment/oauth-aspnet

该端口包括向后兼容性,以允许 ASP.NET 4.x 资源服务器读取授权服务器创建的访问令牌。

nuget 包在这里: https://www.nuget.org/packages/OAuth.AspNet.AuthServer https://www.nuget.org/packages/OAuth.AspNet.Tokens https://www.nuget.org/packages/OAuth.Owin.Tokens

【讨论】:

Katana 的授权服务器有许多未解决的错误,仍然列在 Codeplex 跟踪器上。我看了一眼你的叉子,似乎你一个都没修。如果您仍在寻找“原始授权服务器”,请查看 AspNet.Security.OpenIdConnect.Server,它提供了相同的体验,但修复了 Katana 服务器的所有已知错误。

以上是关于ASP.NET Core 中的 OAuth 授权服务的主要内容,如果未能解决你的问题,请参考以下文章

[第二篇]如何在ASP.Net Core的生产环境中使用OAuth保护swagger ui

拦截asp.net core Authorize action,授权成功后执行自定义动作

对 ASP.NET Core 中的 Google OAuth 包感到困惑

如何对 asp.net core Blazor App 中的 oAuth 身份验证进行故障排除

Google OAuth 2.0 得到错误 400:redirect_uri_mismatch,ASP.net core 3.1

关于 ASP.NET Core 中的授权