我们的应用程序既包含用户存储,也包含用户的数据。根据客户的一些要求,我们正在考虑将我们的应用程序公开为OpenID连接服务提供程序,以允许通过使用我们的用户存储来验证第三方应用程序。我们的应用程序还允许第三方应用程序也使用OAuth令牌访问我们的数据。
似乎我们需要提示用户两次登录和同意,一次用于身份验证,一次用于授权。我可以将它们合并为一个吗?或者我在这里遗漏了什么?我是这个话题的新手。
顺便说一下,我没有看到" OpenID Connect"的标签。
答案 0 :(得分:1)
这取决于如何给出同意以及如何进行身份验证 - OAuth 2规范并未真正说明其中任何一个。它还取决于您使用的流量。
对于标准OAuth 2授权代码流,通常会提示用户进行身份验证,然后再次提示授权客户端请求的范围,因此即使您不是,也需要两个提示。使用OpenID Connect。从最终用户的角度来看,OpenID Connect请求非常相似,除了客户端请求的权限还包括访问其帐户信息。
如果用户之前已批准访问客户端应用程序,则系统可能会存储已批准的范围,以避免将来提示用户。
作为开发的一部分,我要小心尝试从头开始实施OAuth 2和OpenID Connect。
答案 1 :(得分:0)
我知道很久以前就问过这个问题了,但是我正在为未来的读者回答这个问题。
OpenID Connect包含OAuth 2.0。它为OAuth 2.0的授权添加了身份验证。
当您获得授权代码并将其发送到令牌端点时,成功的响应包含OAuth样式的访问令牌(授权),OpenID Connect ID令牌(身份验证)以及可能的刷新令牌,如下所示: / p>
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作为整体流程的一部分。