【发布时间】:2019-08-02 14:19:04
【问题描述】:
最近我正在使用 IdentityServer4 进行 SSO,当我调试代码时,我发现 ResponseType 设置会导致一个棘手的问题。 当我这样设置我的客户时:
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{
options.SignInScheme = "Cookies";
options.Authority = Configuration["Auth:IdentityServer"];
options.RequireHttpsMetadata = false;
options.ClientId = Configuration["Auth:ClientId"];
options.ClientSecret = Configuration["Auth:ClientSecret"];
options.ResponseType = "id_token";
options.SaveTokens = true;
//options.Scope.Add("8e6144b5-87f6-4638-bf08-1a64599a8b39");
options.Scope.Add("offline_access");
options.GetClaimsFromUserInfoEndpoint = true;
});
我可以获得这样的索赔(带有完整的索赔清单):
但是当我像这样更改 responseType options.ResponseType = "id_token token";
索赔是这样的(只发出了一点索赔):
如果我在用户登录时想要完整的声明列表和访问令牌,我应该怎么做才能获得它们?
【问题讨论】:
-
您有
options.ResponseType = "id_token token"用于上面定义的客户端并作为您想要的设置。您的意思是要将其中一个更改为不同的值吗? -
对不起,是的,我从“id_token”更改为“id_token token”,然后我收到的索赔比以前少了。检查身份服务器后,我发现索赔已经发出,但客户端没有收到。
标签: oauth openid identityserver4 openid-connect