在OpenID Connect授权码流与Duende Server中为JWT添加org自定义声明
问题解答
1. "org"声明应该附加到哪个JWT?
外部API要求的是最终传入的Bearer Access Token包含"org"声明,而非client_assertion或原始ID Token。
你调用API时传递的是Token Exchange流程生成的token.AccessToken,API只会校验这个Bearer令牌的内容,不会追溯之前的client_assertion或原始ID Token。要让最终的Access Token包含该声明,有两种可行方式:
- 方式一:在Token Exchange请求中新增参数
部分授权服务器支持在Token Exchange的POST请求里添加自定义参数,会将其注入到新生成的Access Token中。修改你的请求数据即可:var postData = new List<KeyValuePair<string, string>> { new("subject_token", idToken), new("subject_token_type", "urn:ietf:params:oauth:token-type:id_token"), new("grant_type", "urn:ietf:params:oauth:grant-type:token-exchange"), new("client_assertion_type", "urn:ietf:params:oauth:client-assertion-type:jwt-bearer"), new("client_assertion", clientAssertion), new("org", "你的组织标识") // 新增该参数 }; - 方式二:让原始ID Token包含"org"声明
如果授权服务器的Token Exchange逻辑会映射原始ID Token的声明到新Access Token,可在最初的OIDC认证流程中,请求授权服务器返回带"org"声明的ID Token。比如在认证请求中添加对应scope(如scope=openid profile org,具体需匹配授权服务器配置),这样ID Token携带的"org"声明会被继承到新的Access Token中。
2. 如果加在client_assertion里,终端API能识别吗?
不能。client_assertion只是客户端向授权服务器证明自身身份的凭证,仅在Token Exchange请求阶段被授权服务器校验,不会被传递给外部API,也不会被包含在最终生成的Access Token里。API完全看不到client_assertion的内容,因此加在这里无法满足要求。
内容的提问来源于stack exchange,提问作者Gowthami
相关产品推荐
相关产品推荐

