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

我是否可以将OpenID connect/OAuth合并为一个用于身份验证和授权的进程,oauth,oauth-2.0,openid,Oauth,Oauth 2.0,Openid,我们的应用程序承载用户存储和用户数据。根据一些客户的要求,我们正在考虑将我们的应用程序公开为OpenID connect服务提供商,以允许使用我们的用户存储对第三方应用程序进行身份验证。我们的应用程序还允许第三方应用程序使用OAuth令牌访问我们的数据 似乎我们需要提示用户两次登录和同意,一次用于身份验证,一次用于授权。我可以把它们合并成一个吗?还是我在这里遗漏了什么?我不熟悉这个话题 顺便说一下,我没有看到“OpenID连接”的标签 这取决于同意是如何给出的以及认证是如何进行的——OAuth

我们的应用程序承载用户存储和用户数据。根据一些客户的要求,我们正在考虑将我们的应用程序公开为OpenID connect服务提供商,以允许使用我们的用户存储对第三方应用程序进行身份验证。我们的应用程序还允许第三方应用程序使用OAuth令牌访问我们的数据

似乎我们需要提示用户两次登录和同意,一次用于身份验证,一次用于授权。我可以把它们合并成一个吗?还是我在这里遗漏了什么?我不熟悉这个话题


顺便说一下,我没有看到“OpenID连接”的标签

这取决于同意是如何给出的以及认证是如何进行的——OAuth 2规范对这两个方面都没有太多说明。它还将取决于您使用的流

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

如果用户以前已批准对客户端应用程序的访问,系统可能会存储已批准的作用域,以避免将来必须提示用户


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

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

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

当您获取授权代码并将其发送到令牌端点时,成功的响应包含OAuth样式的访问令牌(授权)、OpenID连接id令牌(身份验证)以及可能的刷新令牌,如下所示:

要求 回应 因此,如果您使用OpenID Connect,那么实际上是在使用OAuth 2.0作为整个流程的一部分

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
}