1

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

启动.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"}
4

1 回答 1

0

是否应该在与我的令牌相同的响应中返回它们?

由于您同时指定了目标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,这意味着由客户端应用程序使用。

于 2016-05-29T02:47:23.823 回答