IdentityServer4维护不同身份验证流之间的会话ID

时间:2018-08-23 03:09:28

标签: identityserver4

我正在使用clientCredentials流和OIDC隐式流将Identityserver4用作OIDC认证服务器。我的设置是这个

客户网站(需要JWT进行一些前端决策)

IdentityServer4身份验证服务器

API(需要JWT进行后端授权)

当某人首次访问客户端网站时,将使用clientCredentials流对IdentityServer进行呼叫。这样,用户(名称:GUEST,user_id = null)就可以有限地访问API(包括将商品添加到购物篮中)。

用户登录时,他们可以从IdentityServer获取新令牌以及新的用户声明(名称:BOB,user_id = 1)。

我的问题是,API如何知道登录的用户BOB是GUEST。

我已经尝试了IdentityServer的许多功能,包括

1)客户网站:添加acrValue =客户session.id,但我不知道如何在Indentityserver中阅读并将其设置为声明

2)客户端网站:添加IdTokenHint =客户端session.id,但是同样,不知道如何在IdentityServer中读取此信息并将其设置为Claim

3)在我的客户端配置上启用了“ IncludeJwtId”。这样做时,在clientCredentials调用之后会返回“ jti”声明,但在隐式授予流之后会丢失该声明。

4)隐式授予流之后,返回的JWT具有一个“ sid”,但它没有用,因为它没有包含在clientCredentials流的原始JWT中。

我想我想在clientCredentitals流中以及在用户使用隐式流登录时发送客户端sessionId。这样,在两种情况下我都可以将ID存储在JWT中。

我觉得我缺少明显的东西。有谁知道我如何在clientCredentials流和隐式流之间维护sessionId?

谢谢。

1 个答案:

答案 0 :(得分:0)

  

我的问题是,API如何知道登录的用户BOB是   来宾。

恐怕取决于您的客户端应用程序/ API业务逻辑。

  

我想我想发送一个客户端sessionId作为其中的一部分   clientCredentitals流以及用户使用   隐式流。这样,在两种情况下我都可以将ID存储在JWT中。

如果涉及delegation,这很简单。