IdentityServer4-我需要在API代码中声明给定的名称,但不要';我的API中没有标识令牌。我怎样才能得到你的名字?

IdentityServer4-我需要在API代码中声明给定的名称,但不要';我的API中没有标识令牌。我怎样才能得到你的名字?,identityserver4,access-token,claims-based-identity,Identityserver4,Access Token,Claims Based Identity,我有一个移动客户端(Android)、一个API(WebAPI.NETCore3.1)和一个IdentityServer4 我使用我的客户端登录到IdentityServer,并获得一个身份令牌和一个访问令牌 我使用访问令牌访问API。。。到目前为止一切都很好 现在在API中,仅第一次,我需要用用户的名字和姓氏以及一些其他身份信息更新一个表,但是这些声明在API中不可用(因为这些信息在访问令牌中不可用) 我的问题是,如何从API代码中获取用户声明 我可以将各种声明作为字符串参数传递给API调用,

我有一个移动客户端(Android)、一个API(WebAPI.NETCore3.1)和一个IdentityServer4

我使用我的客户端登录到IdentityServer,并获得一个身份令牌和一个访问令牌

我使用访问令牌访问API。。。到目前为止一切都很好

现在在API中,仅第一次,我需要用用户的名字和姓氏以及一些其他身份信息更新一个表,但是这些声明在API中不可用(因为这些信息在访问令牌中不可用)

我的问题是,如何从API代码中获取用户声明

我可以将各种声明作为字符串参数传递给API调用,但移动客户端无法看到是否发生了此更新,因此每次调用API时我都必须传递此信息,这是非常浪费的,因为这只是第一次需要。我还希望这样做时不要在API的端点中公开它

有人能建议我如何在API中获得用户的用户(配置文件)声明吗

更新:
现在,我在IdentityServer中找到了一个可以提供帮助的端点,称为“userinfo_端点”,但这需要一个访问令牌。我是否可以在API代码中重新使用用于访问API的访问令牌?

是的,您可以使用相同的访问令牌与用户信息端点联系以获取其他用户信息

如果要使用JavaScript访问它,它可能看起来像:

        //Make a AJAX-call to the user endpoint
        $.ajax({
            url: "@OpenIDSettings.userinfo_endpoint",
            type: 'GET',
            headers: { "Authorization": 'Bearer ' + params.access_token }
        }).done(function (data) {

            $("#userinfo").text(JSON.stringify(data, null, 2));
        });
您只需设置授权标头

您还可以通过在ApiScope或ApiResource定义中提供UserClaims,将用户声明添加到访问令牌,如:

new ApiScope()
{
    Name = "shop.admin",
    DisplayName = "You can administrate the e-shop systems",
    Description = "Full admin access to the e-shop system.",
    Emphasize = false,
    Enabled = true,
    Required = false,
    UserClaims = new List<string>
    {
        //Custom user claims that should be provided when requesting access to this API.
        //These claims will be added to the access token, not the ID-token!
        "seniority",
    }
}
newapiscope()
{
Name=“shop.admin”,
DisplayName=“您可以管理电子商店系统”,
Description=“电子商店系统的完全管理员访问权限。”,
强调=错误,
启用=真,
必需=错误,
UserClaims=新列表
{
//请求访问此API时应提供的自定义用户声明。
//这些声明将添加到访问令牌,而不是ID令牌!
“资历”,
}
}

非常感谢您的支持!我将按照您的建议将索赔添加到ApiScope:)