身份服务器检索用户详细信息

时间:2019-03-14 22:33:59

标签: angular identityserver4

我一直在尝试通过遵循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。但是当我查看返回对象的内容时,看不到任何用户信息。

oicd object

我是否需要在服务器上做一些事情来返回用户的名字等。我目前正在使用TestUser类,但是我希望在客户端的user.profile中看到用户名。在服务器上,我的用户设置为

new TestUser {
    SubjectId = "5BE86359-073C-434B-AD2D-A3932222DABE",
    Username = "scott",
    Password = "password"
}

并且如上所示,我可以看到SubjectId(尽管我觉得它映射到sub而不是sid有点奇怪)

我对本教程的理解是,一旦成功登录,oicd-client将使用检索到的令牌再次调用服务器,以在设置loadUserInfo: true时获取用户详细信息

为什么我看不到细节?

编辑:

再次浏览本教程,我注意到这一行:

  

如果loadUserInfo设置为true,它还将调用用户信息端点以获取已被授权访问的任何其他身份数据。

如何授权用户信息端点访问我希望其访问的数据?

1 个答案:

答案 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")
                }
            }
        };
    }

这些声明将出现在客户端的个人资料属性中。