从 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_token
和 token
目的地,因此您的声明应该同时复制到访问令牌和身份令牌中。您应该能够使用任何 JSON 解析器从 access_token
/id_token
属性中提取您正在寻找的声明。
两个备注:
在 ASOS beta4 中,您必须在令牌请求中显式添加 scope=openid
才能取回身份令牌,即使您调用了 ticket.SetScopes("openid")
,这也可能解释了为什么您分享的回复中没有 id_token
属性。下个版本放宽了这个政策。
在 ASOS beta4(针对 ASP.NET Core RC1)中,访问令牌使用 JWT 格式序列化。 beta5 版本不再如此,默认情况下使用加密格式。不要尝试从客户端应用程序读取它们:而是使用 id_token
,这意味着由客户端应用程序使用。
我正在使用以下代码从我的 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_token
和 token
目的地,因此您的声明应该同时复制到访问令牌和身份令牌中。您应该能够使用任何 JSON 解析器从 access_token
/id_token
属性中提取您正在寻找的声明。
两个备注:
在 ASOS beta4 中,您必须在令牌请求中显式添加
scope=openid
才能取回身份令牌,即使您调用了ticket.SetScopes("openid")
,这也可能解释了为什么您分享的回复中没有id_token
属性。下个版本放宽了这个政策。在 ASOS beta4(针对 ASP.NET Core RC1)中,访问令牌使用 JWT 格式序列化。 beta5 版本不再如此,默认情况下使用加密格式。不要尝试从客户端应用程序读取它们:而是使用
id_token
,这意味着由客户端应用程序使用。