我一直在尝试通过遵循this tutorial与我的角度应用程序来实现身份服务器。到目前为止,我发现它确实很有帮助。
我想获得用户名以及一些自定义详细信息,但是我不知道该怎么做。
在该部分
export function getClientSettings(): UserManagerSettings {
return {
authority: 'http://localhost:5555/',
client_id: 'angular_spa',
redirect_uri: 'http://localhost:4200/auth-callback',
post_logout_redirect_uri: 'http://localhost:4200/',
response_type:"id_token token",
scope:"openid profile api1",
filterProtocolClaims: true,
loadUserInfo: true
};
}
我确保设置了loadUserInfo: true
。但是当我查看返回对象的内容时,看不到任何用户信息。
我是否需要在服务器上做一些事情来返回用户的名字等。我目前正在使用TestUser类,但是我希望在客户端的user.profile中看到用户名。在服务器上,我的用户设置为
new TestUser {
SubjectId = "5BE86359-073C-434B-AD2D-A3932222DABE",
Username = "scott",
Password = "password"
}
并且如上所示,我可以看到SubjectId
(尽管我觉得它映射到sub而不是sid有点奇怪)
我对本教程的理解是,一旦成功登录,oicd-client将使用检索到的令牌再次调用服务器,以在设置loadUserInfo: true
时获取用户详细信息
为什么我看不到细节?
编辑:
再次浏览本教程,我注意到这一行:
如果loadUserInfo设置为true,它还将调用用户信息端点以获取已被授权访问的任何其他身份数据。
如何授权用户信息端点访问我希望其访问的数据?
答案 0 :(得分:0)
您需要配置要返回的用户数据,我还没有配置任何数据!
在Startup.cs
中,确保您具有以下条件:
public void ConfigureServices(IServiceCollection services)
{
services.AddIdentityServer()
...
.AddTestUsers(Users.Get())
...
}
然后将claims
添加到您的用户
public static List<TestUser> Get()
{
return new List<TestUser> {
new TestUser {
SubjectId = "5BE86359-073C-434B-AD2D-A3932222DABE",
Username = "scott",
Password = "password",
Claims = new List<Claim>
{
new Claim("name", "scott"),
new Claim("website", "https://scott.com")
}
}
};
}
这些声明将出现在客户端的个人资料属性中。