我需要在Identity Server令牌端点的令牌响应中添加自定义成员。
样本预期响应:
{
"access_token": "XXXXXXXXXXXXXXX",
"token_type": "bearer",
"expires_in": 3600,
"scope": "patient/Observation.read patient/Patient.read",
"patient": 123,
"refresh_token":"XXXXXXXXXXXXXXXXX"
}
我希望在响应中添加范围,患者参数,即使它存在于访问令牌中。
任何有关此的指导都将非常有帮助!
答案 0 :(得分:2)
由于TokenResponse
model的静态特性,因此无法直接使用配置。
话虽如此,IdentityServer4的扩展性极强,因此您可以从技术上为ITokenResponseGenerator
创建自己的实现,并为TokenResponse
创建自己的自定义模型,以实现此行为。
但是,我们不建议这样做,因为似乎您正在尝试解决某些其他系统无法处理标准JWT的缺点。
答案 1 :(得分:0)
通过实现ICustomTokenResponseGenerator接口并在tokenResponse的“自定义”部分添加必需的参数,我能够使Identity Server 3提供自定义的令牌响应。
步骤:
实现界面
在工厂注册接口
此修复程序对我有用,我能够在令牌响应中获取自定义项目。
//Interface Implementation
public class CustomTokenResponseGeneratorService: ICustomTokenResponseGenerator
{
protected ITokenService _tokenService;
public CustomTokenResponseGeneratorService(ITokenService tokenService)
{
_tokenService = tokenService;
}
public Task<TokenResponse> GenerateAsync(ValidatedTokenRequest request, TokenResponse response)
{
var patientID = 123;
response.Custom.Add("patient" , patientID);
response.Custom.Add("scope" , request.AuthorizationCode.Scopes.ToArray());
response.Custom.Add("need_patient_banner" , "false");
response.Custom.Add("encounter" , patientID);
response.Custom.Add("client_id" , request.AuthorizationCode.ClientId);
response.Custom.Add("smart_style_url" , "UNK");
return Task.FromResult(response);
}
}
步骤2:在Identity Server工厂中注册CustomTokenResponseGenerator
//Token Service
factory.CustomTokenResponseGenerator = new Registration<ICustomTokenResponseGenerator, CustomTokenResponseGeneratorService>();
答案 2 :(得分:0)
对于身份服务器4,您可以通过实现ICustomTokenRequestValidator接口在令牌响应中添加自定义参数。
conda create --name VisualisationPBI python=3.7
conda activate VisualisationPBI
pip install seaborn #installs seaborn and dependencies including numpy, pandas and mpl
也不要忘记在启动时在configureServices方法中注册依赖项。添加IdentityServer服务后,可以附加.AddCustomTokenRequestValidator <>({pass-in-name-of-class-implementing})。