微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

IdentityServer4-我需要在我的API代码中使用named_name声明,但我的API中没有身份令牌我如何获得Given_name?

如何解决IdentityServer4-我需要在我的API代码中使用named_name声明,但我的API中没有身份令牌我如何获得Given_name?

我有一个移动客户端(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));
        });

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。