我目前正在申请一份销售工程师的工作,我有关于他们的API,产品,演示技巧和更多的内容,但我对SSO的理解不是很好,所以试图提高那里。我已经做了一些调查,并试图了解它,但我没有人反弹的问题,因此开始这个线程。在下面添加一些上下文。
授权参与方:
SaaS服务-目前支持OIDC和SAML 2.0
合作伙伴-目前支持OAuth 2.0,但可提供多种选择
我的工作是介绍如何让SSO工作,并通过可用的选项。
我自己做了大量的阅读和调查,据我所知,OIDC是建立在OAuth 2.0之上的,增加了一些更多的功能。查看这两个标准的API调用,似乎它们都包含access_token,添加了一个OIDC和一个OAuth 2.0示例,这些示例来自各种教程:
- OIDC示例响应**
{
"access_token":"eyJhbGciOiJSUzI1...Iiwia2lkIiA6I",
"expires_in":3600,
"refresh_expires_in": 0,
"token_type":"Bearer",
"not-before-policy": 0,
"scope":"urn:transaction:carbon urn:transaction:freshwater"
}
- OAuth 2.0示例响应**
{
"scope":"cn",
"expires_in":599,
"token_type":"Bearer",
"refresh_token":"534310ab-570b-4eb4-0ed7-d01d243fae21",
"access_token":"238beab2-b545-4fee-80fa-63f224bc56f6"
}
这是否意味着OIDC向后兼容,例如我们只需要配置SaaS的OIDC设置来与合作伙伴Oauth 2.0服务器进行通信,跳过请求中的“scope:openid”,我们就可以获得access_token,验证它,然后一切都设置好了?或者这只是因为未知的原因而不起作用?还有其他的选择吗?
1条答案
按热度按时间xurqigkl1#
很好,你试图学习和实际理解一个复杂的技术主题。做一些挖掘,而不是在这里发布一个广泛的一般性问题。👏
OIDC是构建在OAuth 2.0之上的一层。要理解的关键是(永远不要忘记)OAuth用于 * 授权 *,而OIDC用于 * 身份验证 *。
授权是指用户授权/允许客户端(或app)代表用户做什么,或者用户允许app访问的事情。
在OIDC之前,用户必须通过授权服务器进行身份验证,但客户端/应用程序没有关于谁进行了身份验证的信息。它只是获取访问令牌,该令牌表示某个用户ID允许访问某些资源。
OIDC提供了一种给予该上下文的方法。它添加了ID令牌,这与访问令牌类似,因为它通常也是一个JWT,但信息是关于身份验证的用户的身份。它还提供了一个端点(/userinfo),客户端可以访问该端点并获取有关该用户的信息。
所以,OIDC并不是真的向后兼容。如果您没有请求OIDC作用域或令牌,那么您只是在进行OAuth。
在标记为OIDC的第一个示例响应中,我没有看到ID标记,也没有看到OIDC范围。虽然它仍然可以是OIDC(使用该访问令牌从/userinfo端点获取信息,但这仍然需要一些OIDC范围),但从您共享的内容来看,它看起来并不像。