我正在使用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?
谢谢。
答案 0 :(得分:0)
我的问题是,API如何知道登录的用户BOB是 来宾。
恐怕取决于您的客户端应用程序/ API业务逻辑。
我想我想发送一个客户端sessionId作为其中的一部分 clientCredentitals流以及用户使用 隐式流。这样,在两种情况下我都可以将ID存储在JWT中。
如果涉及delegation,这很简单。