我可以合并OpenID连接/OAuth作为认证和授权的一个过程



我们的应用程序既包含用户存储,也包含用户数据。根据一些客户的需求,我们正在考虑将我们的应用程序公开为OpenID连接服务提供商,以允许第三方应用程序通过使用我们的用户存储进行身份验证。我们的应用程序也允许第三方应用程序通过使用OAuth令牌访问我们的数据。

似乎我们需要提示用户两次登录和同意,一次用于身份验证,一次用于授权。我能把它们合二为一吗?还是我遗漏了什么?我对这个话题是新手。

顺便说一下,我没有看到"OpenID Connect"的标签。

这取决于如何给出同意以及如何进行身份验证—OAuth 2规范并没有对这两方面做太多说明。这还取决于您使用的流程。

对于标准的OAuth 2授权代码流,通常会提示用户进行身份验证,然后再次提示用户授权客户端请求的范围,因此这无论如何都需要两个提示,即使您不使用OpenID Connect。从最终用户的角度来看,OpenID连接请求实际上非常相似,除了客户端请求的权限还包括访问他们的帐户信息。

如果用户之前已经批准了对客户端应用程序的访问,系统可能会存储批准的范围,以避免将来不得不提示用户。

我会小心尝试实现OAuth 2和OpenID连接从头开始作为你的开发的一部分。

我知道这个问题很久以前就被问到了,但我还是为将来的读者回答这个问题。

OpenID Connect包含OAuth 2.0。它将身份验证添加到OAuth 2.0的授权中。

当您获得授权码并将其发送到令牌端点时,成功的响应包含oauth风格的访问令牌(授权),OpenID连接id令牌(身份验证),可能还有刷新令牌,如下所示:

请求
curl -s -u $client_id:$client_secret 
  --data grant_type=authorization_code 
  --data code=$auth_code 
  --data-urlencode redirect_uri=https://localhost/callback/ 
  https://openidserver.example.com/oauth/token

反应
{
  "access_token": "3Vx3oEq8m1GBTG8ZhISr**blahblah**5TqwcaCCq04",
  "refresh_token": "5azbf2c**blahblah**7t9sKW9dqf6poh0P",
  "id_token": "**redacted_header**.**redacted_id_token**.**redacted_signature**",
  "token_type": "Bearer",
  "expires_in": 300
}

因此,如果您使用OpenID Connect,您将有效地使用OAuth 2.0作为整体流程的一部分。

相关内容

最新更新