oidc-client-js 没有从 Identity Server 4 正确获取声明
oidc-client-js is not getting claims correctly from Identity Server 4
我有一个 Identity Server 4 的本地实例,我正在尝试遵循 this guide to create a Javascript client. This uses the oidc-client-js 库,并且我正在使用登录弹出方法,所以我的登录事件处理程序如下所示:
signin(e) {
e.preventDefault();
this.oidcUserMgr.signinPopup({state:'some data'}).then(function(user) {
console.log("signed in", user.profile);
}).catch(function(err) {
console.log(err);
});
}
身份验证似乎工作正常 - 我被重定向到我的身份服务器,它接受客户端请求,验证我的登录并 returns 我到客户端应用程序。但是,文档说上面代码中的 user.profile
对象应该包含用户声明,但实际上没有。这是 use.profile
我回来的:
sub
属性是刚刚认证的用户的正确ID。但是我的 Identity Server 还针对我的客户请求的其他范围(profile
和 email
)发布了声明,因此我应该看到诸如 name
、preferred_username
、email
等)。我可以观察到在 IS4 中调试我的 IProfileService
实现时发出的这些声明。此外,如果我使用用户对象返回的 access_token
向本地的另一个 API 运行 发出请求(一个 ASP.NET Web API),我确实看到了this.User.Claims
中的这些声明:
那么如何在我的 Javascript 代码中获取这些声明?
这些用户声明可能来自 ID 令牌。要完成这项工作,请检查您的 IDP 提供商的客户端配置中是否有 AlwaysIncludeUserClaimsInIdToken = true
,例如
public static IEnumerable<Client> GetClients()
{
return new List<Client>()
{
new Client()
{
ClientName = "IDP Client",
ClientId = "client",
ClientSecrets = { new Secret("secret".Sha256()) },
AllowedGrantTypes = GrantTypes.Hybrid,
RedirectUris = new List<string>()
{
"http://localhost:60811/signin-oidc"
},
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"myapi"
},
AlwaysIncludeUserClaimsInIdToken = true,
AllowOfflineAccess = true
},
我有一个 Identity Server 4 的本地实例,我正在尝试遵循 this guide to create a Javascript client. This uses the oidc-client-js 库,并且我正在使用登录弹出方法,所以我的登录事件处理程序如下所示:
signin(e) {
e.preventDefault();
this.oidcUserMgr.signinPopup({state:'some data'}).then(function(user) {
console.log("signed in", user.profile);
}).catch(function(err) {
console.log(err);
});
}
身份验证似乎工作正常 - 我被重定向到我的身份服务器,它接受客户端请求,验证我的登录并 returns 我到客户端应用程序。但是,文档说上面代码中的 user.profile
对象应该包含用户声明,但实际上没有。这是 use.profile
我回来的:
sub
属性是刚刚认证的用户的正确ID。但是我的 Identity Server 还针对我的客户请求的其他范围(profile
和 email
)发布了声明,因此我应该看到诸如 name
、preferred_username
、email
等)。我可以观察到在 IS4 中调试我的 IProfileService
实现时发出的这些声明。此外,如果我使用用户对象返回的 access_token
向本地的另一个 API 运行 发出请求(一个 ASP.NET Web API),我确实看到了this.User.Claims
中的这些声明:
那么如何在我的 Javascript 代码中获取这些声明?
这些用户声明可能来自 ID 令牌。要完成这项工作,请检查您的 IDP 提供商的客户端配置中是否有 AlwaysIncludeUserClaimsInIdToken = true
,例如
public static IEnumerable<Client> GetClients()
{
return new List<Client>()
{
new Client()
{
ClientName = "IDP Client",
ClientId = "client",
ClientSecrets = { new Secret("secret".Sha256()) },
AllowedGrantTypes = GrantTypes.Hybrid,
RedirectUris = new List<string>()
{
"http://localhost:60811/signin-oidc"
},
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"myapi"
},
AlwaysIncludeUserClaimsInIdToken = true,
AllowOfflineAccess = true
},