问题描述
我有一个移动客户端(Android),一个API(WebAPI .net Core 3.1)和一个IdentityServer4。
我用客户端登录到IdentityServer,然后取回一个身份令牌和一个访问令牌。
我使用访问令牌访问API ...到目前为止一切正常。
现在在API中,仅在第一次时,我需要使用用户的名字和姓氏以及一些其他身份信息来更新表,但是这些声明在API中不可用(因为该信息在访问令牌)
我的问题是,如何从我的API代码获取用户声明?
我可以将各种声明作为字符串参数传递给API调用,但是移动客户端无法查看此更新是否发生,因此每次调用API时我都必须传递此信息,这非常浪费,因为只有第一次才需要。我也希望这样做而不必在API的端点中公开它。
谁能建议我如何在API中获得用户的用户(个人资料)声明?
更新: 现在,我在IdentityServer中找到了一个可以提供帮助的终结点,称为“ userinfo_endpoint”,但这需要访问令牌。我可以在我的API代码内以某种方式重新使用用于访问API的访问令牌吗?
解决方法
是的,您可以使用相同的访问令牌来联系用户信息端点以获取其他用户信息。
如果您要使用JavaScript来访问它,它可能看起来像:
master
您只需设置授权标头。
您还可以通过在ApiScopes或ApiResource定义中提供UserClaims来向访问令牌添加用户声明,例如:
//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));
});