从 ASP.Net MVC 6 中的 OAuth 授权服务获取声明

Getting Claims from OAuth Authorization Service in ASP.Net MVC 6

我正在使用以下代码从我的 MVC 网络应用程序成功获取令牌。但是我不确定如何检索我添加的声明。它们应该在与我的令牌相同的响应中返回吗? 谢谢!

Startup.cs:

    app.UseJwtBearerAuthentication(options =>
    {
        options.AutomaticAuthenticate = true;
        options.Audience = "resource_server";
        options.Authority = "https://www.example.com/";
        options.RequireHttpsMetadata = false;
    });

    app.UseOpenIdConnectServer(options =>
    {
        options.ApplicationCanDisplayErrors = true;
        options.AllowInsecureHttp = false;
        options.Provider = new AuthorizationProvider();
        options.TokenEndpointPath = "/connect/token";
    });

添加声明:

        identity.AddClaim("custom_claim", "value", "token id_token");

        foreach (string role in await userManager.GetRolesAsync(user))
        {
            identity.AddClaim(ClaimTypes.Role, role, "id_token token");
        }

这是我的 PostAsync 结果:

{"resource":"resource_server","scope":"openid profile","token_type":"bearer","access_token":"eyJhbGciOiJSU....","expires_in":"3600"}

Should they be returned in the same response as my token?

由于您同时指定了 id_tokentoken 目的地,因此您的声明应该同时复制到访问令牌和身份令牌中。您应该能够使用任何 JSON 解析器从 access_token/id_token 属性中提取您正在寻找的声明。

两个备注:

  • 在 ASOS beta4 中,您必须在令牌请求中显式添加 scope=openid 才能取回身份令牌,即使您调用了 ticket.SetScopes("openid"),这也可能解释了为什么您分享的回复中没有 id_token 属性。下个版本放宽了这个政策。

  • 在 ASOS beta4(针对 ASP.NET Core RC1)中,访问令牌使用 JWT 格式序列化。 beta5 版本不再如此,默认情况下使用加密格式。不要尝试从客户端应用程序读取它们:而是使用 id_token,这意味着由客户端应用程序使用。