OAUTH2如果我有访问权限或refresh_Token,如何获取用户名

问题描述 投票:2回答:2

我有一个C#应用程序,它使用oauth2连接到第三方应用程序。首先,用户被重定向到外部应用程序(ERP),在那里他输入用户名和密码以及有效1小时的访问令牌,并生成有效50年的刷新令牌。我正在使用我的应用程序中的这个刷新令牌,并基于此我获得了一个新的访问令牌。我有ClientId和ClientSecret。我可以获得具有此2个令牌的已登录用户名吗?

Request :
POST /connect/token HTTP/1.1
Authorization: Basic base64(client_id:client_secret)
Content-Type: application/x-www-form-urlencoded;charset=UTF-8

"grant_type=refresh_token&refresh_token=<refresh_token>"

Response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
  "access_token": <access_token>,
  "refresh_token": <refresh_token>,
  "token_type":"bearer",
  "expires_in":3600
}
c# oauth-2.0 access-token refresh-token
2个回答
1
投票

如果您以JSON Web令牌格式(通常称为自包含访问令牌)接收令牌,则可以解码令牌有效内容并获取用户名。通常,这可以设置为主题(“子”)声明,或者可以作为JWT中的专用声明发送。请参阅此link以了解JWT声明。

如果不是这种情况,这意味着访问令牌是不透明的,那么您需要使用令牌内省端点。您需要验证授权服务器(为您提供访问令牌的外部方)提供此类端点。如果是这样,您可以调用内省端点并获取令牌详细信息。此响应用于验证访问令牌的有效性以及获取用户名等声明。请阅读更多关于这个link的内省反应。

或者,您可以切换到[OpenID Connect](OIDC)3。这将在令牌响应中包含ID令牌,这是一个JWT。您可以使用它来获取用户名(+其他用户信息)并在JWT验证之上验证最终用户。验证授权服务器是否支持OIDC。

关于刷新令牌,您必须拥有有效的访问令牌或有效的令牌响应才能获得上述所有内容。刷新对您的应用程序没有任何意义,除了获取新的更新的令牌。


0
投票

您可以尝试使用jwt.io上的某个库解码您的令牌,您可以通过将令牌复制并粘贴到站点中来测试它,并查看您的令牌是否包含您需要的信息。然后,如果向下滚动,可以使用许多库来解码代码中的令牌。看看微软的官方library here,也可以通过nuget包经理Install-Package System.IdentityModel.Tokens.Jwt安装

© www.soinside.com 2019 - 2024. All rights reserved.