(事先道歉可能滥用“身份验证/授权”一词)
我正在构建几个Web应用程序,这些应用程序使用与此类似的身份提供程序相互通信。
A -----> idP
/ \
/ \
/ \
\/_ _\/
B C
如果应用程序A将向B和C发出推送和提取数据的请求,并且必须在使用应用程序A的用户的上下文中这样做。鉴于我在idP上使用OAuth2,我的第一个想法是使用身份提供者发布的不记名令牌,并将其传递给每个应用程序,作为登录"登录"从申请A到B / C.
该方法的问题在于B / C不知道该承载令牌属于谁。为了使这项工作,我必须在idP上创建一个终点,以获取B / C可以用来确定用户的用户信息。虽然这可行,但我想看看是否有更标准的东西我可以使用。那是我找到OpenID Connect的时候。
从我所看到的,OpenID Connect基本上用JWT替换了承载令牌,并用私钥对其进行签名以防止被篡改。鉴于此,我想到的是:
我有一些关于以这种方式使用OpenID Connect的问题:
答案 0 :(得分:3)
虽然这不是直接回答你的问题,但是我要在其中添加评论,因为我目前正在问自己类似的问题。这也是基于我的谦虚理解。
关于 ID令牌的受众群体(aud
声明),在初次注册时,您的客户注册可以包含您的客户端的其他应用程序(也注册为OAuth客户端)想要访问。这可以用于在为您的客户发放ID令牌时始终包含此类受众列表。还请检查应包含您的客户ID的azp
(授权方)声明。他说,我还没有看到在注册时管理这个工具的例子。
关于您更换承载令牌(即访问令牌)的ID令牌的评论,我一直在寻找一种标准方式(例如特定的授权头)来在调用另一个应用程序时传递ID令牌,但我没有'找到任何。我不确定是否应该使用标准授权承载,或者是否有其他标准方式来传递ID令牌。
另请注意,就我所见,ID令牌除了作为短期令牌外还有其他限制,例如:
它们似乎更倾向于用于启动会话(以类似于SAML断言的方式),就像您所描述的那样,但您宁愿将ID Token声明和从UserInfo端点检索到的其他信息复制到您的会话信息中因为您的会话可能会持续时间超过ID令牌的持续时间。
话虽如此,如果我们想要使用ID令牌作为用户身份验证的一些证据,那么在令牌过期后这不会起作用,因此我不确定是否会在令牌期间保留并使用它整个会议是一个好主意。 如果这被用作短链调用的一部分或者用于创建与下游应用程序的新会话(包括使用ID令牌作为用户身份的证据启动JWT授权类型OAuth流),这可能是针对此目标的