.NetCore WebApi中不提供JWT中的Azure广告角色和组的声明

时间:2018-12-14 10:56:05

标签: c# azure oauth-2.0 azure-active-directory asp.net-core-2.1

我希望您能在以下方面为我提供帮助,因为我一直在寻找解决方案,但不幸的是未能找到任何可行的解决方案。简而言之:我可以在浏览器的JWT的有效负载中看到关于组和角色的声明,但是它们在我的.Net Core WebApi中不可用。

我们有一个作为两个Azure应用程序服务运行的应用程序:Angular5中的Web应用程序和.net core 2.1中的WebApi。我们使用Azure AD进行身份验证可以正常工作,现在还希望将其用于基于组或角色的授权。

在网络应用中,我们将angular-oauth2-oidc库用于隐式流程。

在Azure中,我已将“ groupMembershipClaims”设置为“ All”,并在Web应用程序的应用程序清单中创建了一个角色,并为其分配了用户。当我在浏览器中查看JWT的有效负载时,我确实看到了角色和组的声明:

    {
      "aud": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "iss": "https://sts.windows.net/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/",
      "iat": xxxxxxxxxx,
      "nbf": xxxxxxxxxx,
      "exp": xxxxxxxxxx,
      "aio": "xxx"
      "amr": [
        "pwd"
      ],
      "at_hash": "xx"
      "family_name": "xxx"
      "given_name": "xxx",
      "groups": [
        "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      ],
      "ipaddr": "xxx.xxx.xx.x",
      "name": "x",
      "nonce": "x",
      "oid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "roles": [
        "xxxUser"
      ],
      "sub": "xxx",
      "tid": "xxx",
      "unique_name": "xxx",
      "upn": "xxx",
      "uti": "xxx",
      "ver": "1.0"
    }

但是,当我想在WebApi中使用角色或组时,ClaimsPrincipal没有声明: Claims in WebApi

最初,我想对也丢失的“ sub”进行授权,基于此博客文章:https://leastprivilege.com/2017/11/15/missing-claims-in-the-asp-net-core-2-openid-connect-handler/我使用过:

    JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();

和/或

    JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Remove("sub");

它可以使子菜单可用,但这似乎不适用于角色或组。

我的Startup.cs中的代码如下:

    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.Authority = Configuration.GetSection("Authentication:Authority").Value;
            options.Audience = Configuration.GetSection("Authentication:Audience").Value;
        });

我一直在尝试各种TokenValidationParameters,但无济于事。

任何帮助将不胜感激!

0 个答案:

没有答案