Rob*_*ert 5 authentication azure azure-active-directory asp.net-core-2.0
我的Web应用程序是使用.NET Core开发并部署在Azure中的。我已启用 Azure 应用服务身份验证并将其配置为使用 Azure Active Directory。当我访问网络应用程序时,我确实被重定向到正确的登录页面。登录后,我可以浏览到端点 .auth/me 并查看我的用户存在声明。我还可以验证下面的请求标头是否存在及其值:
但我无法在我的控制器中检索这些声明。使用 User.Identity.isAuthenticated 始终为 false,并且 User.Identity.Claims 为空。
如何使用户经过身份验证并检索声明?
理论上,我也许可以检查请求标头(X-MS-TOKEN-AAD-ID-TOKEN)是否存在,然后检索端点 .auth/me 上存在的声明,但这似乎并不是正确的方法去吗?
编辑:我是否遇到了这里讨论的同一问题?(在 Asp.Net Core Web 应用程序中使用 EasyAuth 对 Azure 应用服务上的 AAD 进行身份验证时,无法填充 ClaimsPrincipal)
正如在应用程序中使用用户身份所述:
应用服务通过使用特殊标头将一些用户信息传递到您的应用程序。外部请求禁止这些标头,并且仅在应用服务身份验证/授权设置时才会出现。一些示例标头包括:
- X-MS-客户端-主体名称
- X-MS-客户端-主体-ID
- X-MS-令牌-FACEBOOK-访问令牌
- X-MS-令牌-FACEBOOK-过期
用任何语言或框架编写的代码都可以从这些标头中获取所需的信息。对于 ASP.NET 4.6 应用程序,ClaimsPrincipal会自动设置为适当的值。
/.auth/me我们的应用程序还可以通过应用程序端点上的 HTTP GET 获取其他用户详细信息。请求中包含的有效令牌将返回一个 JSON 负载,其中包含有关正在使用的提供程序、底层提供程序令牌和一些其他用户信息的详细信息。
正如 Chris Gillum 建议的那样,您可以调用端点/.auth/me并检索用户声明。您可以编写自定义中间件来检查X-MS-CLIENT-PRINCIPAL-ID标头并调用/.auth/me端点并手动设置用户声明。这是详细的代码示例,您可以参考这个类似的问题。
此外,您可以修改您的应用程序并显式添加身份验证中间件,而不是像evilSnobu 评论的那样使用应用程序服务身份验证/授权(EasyAuth)。对于这种方法,您可以使用 ASP.Net Core OpenID Connect 中间件,详细信息您可以按照以下教程进行操作:
将 Azure AD(v2.0 端点)集成到 ASP.NET Core Web 应用程序中
将 Azure AD 集成到 ASP.NET Core Web 应用程序
| 归档时间: |
|
| 查看次数: |
3199 次 |
| 最近记录: |