什么是ProfileService /何时执行ProfileService?

时间:2017-02-02 17:02:23

标签: c# asp.net asp.net-core identityserver4 oidc-client-js

我一直在玩IdentityServer4。绝对喜欢它。

我一直在浏览您网站上的教程,特别是https://identityserver4.readthedocs.io/en/release/quickstarts/7_javascript_client.html

我创建了一个配置文件服务,它执行以下操作:

public class ProfileService : IProfileService
{
    public Task GetProfileDataAsync(ProfileDataRequestContext context)
    {
        context.IssuedClaims.Add(new Claim("test-claim", "test-value"));
        return Task.FromResult(0);
    }

    public Task IsActiveAsync(IsActiveContext context)
    {
        context.IsActive = true;

        return Task.FromResult(0);
    }
}

这很好用,我的自定义声明在我的JS客户端的日志窗口中可见。

我在它上面设置了一个断点,只是为了检查上下文中的内容,我注意到它被击中了两次。调用者属性分别为ClaimsProviderAccessTokenUserInfoEndpoint。这是为什么?

在我的天真中,我从我的js客户端删除了profile范围,并且在oidc-js配置中也删除了配置文件范围,并设置loadUserInfo: false但我的ProfileService仍然被调用两次。

如果我的最终目标是根据数据库中的参数设置声明,我真的不想两次做这个操作,是吗? (真正的问题 - 我不知道)。一个解决方案'只会将它们设置在" ClaimsProviderAccessToken"但是有一些事情告诉我,ProfileServices会被调用两次是有原因的,并且在两次运行中设置声明都有一定的重要性。

P.S。我认为这里有一个拼写错误https://github.com/IdentityServer/IdentityServer4/blob/dev/docs/quickstarts/8_entity_framework.rst这不应该是" Microsoft.EntityFrameworkCore.Tools.DotNet"在tools部分?而不是" Microsoft.EntityFrameworkCore.Tools"我认为为一些如此微不足道的事情创建一个新问题是不恰当的,而且不一定是错的!

1 个答案:

答案 0 :(得分:9)

只要IdentityServer需要将有关用户的声明返回给客户端应用程序,就会调用配置文件服务。

如果您请求身份和访问令牌 - 它将被调用两次(因为您可能会在每种令牌类型中添加不同的声明)。