我们如何使用OIDC身份验证令牌?缓存它还是将其发送给用户代理?

时间:2018-07-19 12:03:11

标签: azure-ad-b2c oidc

我们确实在努力理解OIDC如何在B2C(或任何提供商的OIDC)中工作。

我们认为我们理解了协议的(某些)部分...但是却与其他部分完全混淆了。

想知道是否有人可以看一下下图,并希望(更正)发布更正。

我们的问题是:

  • 在将用户发送到IdP之前创建会话记录并将会话记录Guid id保存为Nonce是否正确?
    • 在重新发行代币时,Nonce是否会保持不变?
    • 是否有可能将其变成DoS攻击媒介,破坏受保护的资源URL?还是应该使用WAF提前停止请求?
  • 我们已经争论了一段时间-但是Auth_Token是从IdP私有获取的,不应与用户代理共享(换句话说,它是 IdP 会话)令牌,与 App 会话令牌相对)?
    • 如果它是私有的,我们是否应该发回在服务器上生成的应用会话令牌?
  • 但是要调用另一个Service,我们应该缓存返回的Auth_Token,以便可以使用它来调用ServiceB? (或者我们现在完全弄错了树吗?)

  • 当ServiceB调用失败(例如,作用域不足)时,该怎么办? ServiceA是否将UserAgent发送回IdP,并在该IdP处获得新的Auth_Token,客户端(即ServiceA)使用它来替换其先前缓存的Auth_Token,并尝试再次调用ServiceB?

  • 最后(我们对此有很多争论)。是否假设ServiceA返回Cookie AND BearerToken,以便客户端可以在随后的API调用中使用BearerToken ...或者在调用ServiceA的API时客户端应该使用Cookie进行身份验证?

我们知道这是很多问题。但是我们想不出一种将我们面临的问题分解成较小的离散问题的方法。整个事情目前使我们感到困惑。

谢谢。非常。

到目前为止,我们在这里构建的序列图可以在这里查看:

Image

PS:如果有帮助,可以从此处重新编辑和重新嵌入上面的图像(图像底部的文本/图像链接):

Source DSL

1 个答案:

答案 0 :(得分:0)

请参考this repository,其中显示了令牌验证逻辑如何与OpenID Connect和B2C一起工作。

  

在将用户发送到以下位置之前创建会话记录是否正确?   IdP,然后将会话记录Guid id保存为Nonce?

是的,这应该是正确的。

  

在重新发行令牌时,Nonce会保持不变吗?

我不确定您的意思,但在ID令牌的现时声明中该值将保持不变,所以应该。

请参见also>

值得为您的案例寻求客户支持,因为有很多问题可能最适合产品团队。我将跟进这些问题,并尽快与您联系。