我们的应用程序既包含用户存储,也包含用户数据。根据一些客户的需求,我们正在考虑将我们的应用程序公开为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作为整体流程的一部分。