我的 webapp 是使用 .NET Core 开发的,并部署在 Azure 中。我已启用 Azure 应用服务身份验证并将其配置为使用 Azure Active Directory。
当我访问 webapp 时,我确实被重定向到正确的登录页面。
登录后,我可以浏览到端点 .auth/me 并查看我的用户存在的声明。我还可以验证以下请求 header 是否存在值:

  • X-MS-TOKEN-AAD-ID-TOKEN
  • X-MS-TOKEN-AAD-ACCESS-TOKEN
  • X-MS-TOKEN-AAD-EXPIRES-ON
  • X-MS-TOKEN-AAD-REFRESH-TOKEN

  • 但是我无法在我的 Controller 中检索这些声明。
    使用 User.Identity.isAuthenticated 始终为 false,而 User.Identity.Claims 为空。

    如何使用户通过身份验证并检索声明?

    从理论上讲,我可以检查请求 header (X-MS-TOKEN-AAD-ID-TOKEN)是否存在,然后检索端点 .auth/me 上存在的声明,但这似乎并不是正确的方法去吗?

    编辑:
    我是否在此处讨论的同一问题上磕磕绊绊? ( Trouble getting ClaimsPrincipal populated when using EasyAuth to authenticate against AAD on Azure App Service in a Asp.Net Core web app )

    最佳答案

    正如 Working with user identities in your application 所说:



    正如 Chris Gillum 建议的那样,您可以调用 /.auth/me 端点并检索用户声明。您可以编写自定义中间件来检查 X-MS-CLIENT-PRINCIPAL-ID header 并调用 /.auth/me 端点并手动设置用户声明。这是详细的代码示例,您可以引用这个类似的 issue

    此外,您可以修改您的应用程序并显式添加身份验证中间件,而不是像 evilSnobu 评论的那样使用应用服务身份验证/授权 (EasyAuth)。对于这种方法,您可以使用 ASP.Net Core OpenID Connect 中间件,详细信息可以按照以下教程进行操作:

    Integrating Azure AD (v2.0 endpoint) into an ASP.NET Core web app

    Integrating Azure AD into an ASP.NET Core web app

    关于azure - 具有 Azure 应用服务身份验证的 .NET Core 应用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49151961/

    10-17 02:26