已登录用户的 OAuth2 身份验证代码

Web*_*ser 7 oauth oauth-2.0

通过 OAuth2 实现(内部开发或第三方,如 Google、Facebook、Login With Amazon 等),是否可以代表登录到移动应用程序或 Web 应用程序的用户生成身份验证代码,而无需需要用户执行任何操作?

获取身份验证码的典型流程需要用户对所请求的范围进行身份验证和授权。但在这种情况下,用户已经通过应用程序的身份验证,因此我想避免要求用户再次登录。

调用外部第三方 API 需要身份验证代码,该 API 最终将用身份验证代码交换刷新/访问令牌。后端系统(与 API 关联)需要根据与其共享的身份验证代码获取自己的刷新/访问令牌。这不是一次性使用令牌;系统需要为登录用户拥有自己的令牌,独立于移动客户端。

and*_*ija 0

可以获取另一个客户端的用户令牌。您不需要新的身份验证代码,只需使用一些参数调用令牌端点即可。例如,在 Keycloak 中,此流程称为令牌交换。您需要在 Keycloak 中配置客户端,然后可以使用您拥有的访问令牌调用令牌端点。

{
  client_id: your client id,
  client_secret: your client secret, 
  subject_token: token you have
  audience: target client id, 
  grant_type: urn:ietf:params:oauth:grant-type:token-exchange, 
  requested token type: urn:ietf:params:oauth:token-type:refresh_token
}
Run Code Online (Sandbox Code Playgroud)

您可以在此处阅读有关此流程的信息: https://tools.ietf.org/id/draft-ietf-oauth-token-exchange-12.html

它也被称为代表流,就像在 Azure 中一样: https: //learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-on-behalf-of-flow

  • 因为系统(与第 3 方 API 关联)需要根据与其共享的身份验证代码获取自己的刷新/访问令牌。这不是一次性使用令牌;该系统需要为登录用户拥有自己的令牌,独立于移动客户端。 (3认同)
  • 实际上,在这种情况下,我特别需要生成一个_授权代码_,与登录用户的同一身份验证服务器关联。我并不是想为另一个客户端获取用户令牌。 (2认同)
  • 是的,没错,需要将授权代码提供给第三方 API,以便他们的系统可以使用它来为用户获取令牌。 (2认同)