我可以将OpenID connect / OAuth合并为身份验证和授权的一个进程

时间:2014-07-01 17:41:07

标签: oauth oauth-2.0 openid

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

似乎我们需要提示用户两次登录和同意,一次用于身份验证,一次用于授权。我可以将它们合并为一个吗?或者我在这里遗漏了什么?我是这个话题的新手。

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

2 个答案:

答案 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作为整体流程的一部分。

相关问题