ASP.NET 5 中的 Web API 身份验证

Posted

技术标签:

【中文标题】ASP.NET 5 中的 Web API 身份验证【英文标题】:Web API Authentication in ASP.NET 5 【发布时间】:2015-07-20 16:23:05 【问题描述】:

我研究 ASP.NET 5 已经有一段时间了,但有些东西我还很困惑。为了在 Web API 2 中实现身份验证,我以前所做的基本上是使用 OWIN OAuth 身份验证服务器中间件。它使用简单,我可以只配置我需要的东西,而且我不需要把一堆东西放到应用程序上。

现在,起初我在 ASP.NET 5 中没有找到它,我认为等待中间件出现只是时间问题。但是昨天,在阅读 Security repo 上的问题时,我发现显然无意将此中间件移植到新版本的框架中。

相反,似乎鼓励人们使用 Identity Server 3。我查看了该项目,虽然它很好并且有很多用途,但我真的更喜欢有时只配置我需要的最低限度。另外,另一个缺点是 Identity Server 3 需要完整的 CLR,所以如果我需要使用它来为我的应用程序提供身份验证,我需要停止使用 Core CLR,这对我来说是一个巨大 缺点,因为 Core CLR 更轻量级。

那么,如果我不想在 ASP.NET 5 上使用 Identity Server 3,如果 OAuth Authentication Server 中间件不见了,我该如何实现 Web API 的身份验证?有没有人经历过并找到解决方法?

如何在不使用 Identity Server 3 的情况下处理 ASP.NET 5 Web API 上的身份验证?

【问题讨论】:

您不必使用 Identity Server3,而是构建自己的身份验证服务器,该服务器将在身份验证时返回令牌 所以我需要自己实现一个 OAuth 身份验证服务器? Identity server 4 现在以核心为目标:leastprivilege.com/2016/01/11/… 【参考方案1】:

确实,在 ASP.NET 5 中不会有 OAuthAuthorizationServerMiddleware

如果您正在寻找相同的低级方法,您应该查看 AspNet.Security.OpenIdConnect.Server:它是 Katana 3 附带的 OAuth2 授权服务器中间件的高级分支,但它以 OpenID Connect 为目标,正如您已经知道的那样想通了( OAuth Authorization Service in ASP.NET Core)。

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

OpenID Connect 本身基于 OAuth2,基本上是一个提供标准化身份验证功能的超集。别担心:当然,您可以将任何 OAuth2 客户端与任何 OpenID Connect 服务器一起使用,包括 AspNet.Security.OpenIdConnect.Server

不要错过 MVC 6 示例:https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server/tree/dev/samples/Mvc

app.UseJwtBearerAuthentication(new JwtBearerOptions

    AutomaticAuthenticate = true,
    AutomaticChallenge = true,
    Audience = "http://localhost:54540/",
    Authority = "http://localhost:54540/"
);

app.UseOpenIdConnectServer(options =>

    options.Provider = new AuthorizationProvider();
);

祝你好运,如果需要帮助,请随时联系我。

【讨论】:

嗨,我有相同的设置,它适用于我的开发机器。我尝试将其发布到服务器(测试环境),但出现错误“InvalidOperationException:IDX10803:无法从:'localhost:5000/.well-known/openid-configuration'获取配置”。我已经安装了 HttpPlatformHandler 并将我的应用程序池设置为“无托管代码”。我的站点绑定到端口 8890。导航到“localhost:8890”会在 Chrome 和 IE 中引发错误。当我从 approot 文件夹运行 web.cmd 并导航到“localhost:5000”时,它可以工作,但只能在 Chrome 中使用。 IE 给出了同样的错误。请问有什么帮助吗?【参考方案2】:

我在 ASP.NET 5 中尝试使用 OWIN OAuth 授权服务器中间件时遇到了完全相同的问题,因此我决定自己移植代码。您可以在此 GitHub 存储库 https://github.com/XacronDevelopment/oauth-aspnet 中找到源代码,或者只使用 NuGet 包 OAuth.AspNet.AuthServer 和 OAuth.AspNet.Tokens。查看源代码以了解事物的连接方式;源代码中的示例与 Microsoft 在此处 http://bit.ly/1MOGDEJ 创建的示例相同,但添加了 ASP.NET 5 示例。

【讨论】:

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

以上是关于ASP.NET 5 中的 Web API 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

text 使用ASP.NET Core 2 Web API,Angular 5,.NET核心身份和Facebook登录进行JWT身份验证

当用户未经身份验证时,ASP.NET Core 5 Web API 返回 404 代码而不是 401

使用 ASP.NET 5 MVC 6 Web API 进行 Cookie 身份验证

ASP.NET 核心 Web API 和 Angular 客户端中的外部身份验证

Azure AD B2C 与 ASP.NET Web API 发出令牌,用于 Web API 中的身份验证和访问 MS Graph API

使用 Windows 身份验证启用 CORS ASP.NET Web API 2 应用程序中的预检请求