You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在OpenIddict的ApplyTokenResponseContext事件中获取用户上下文并扩展Token响应

如何在ApplyTokenResponseContext事件中访问用户/认证主体上下文并添加patient属性

要在ApplyTokenResponseContext事件中获取用户认证上下文并添加patient属性,核心是通过事件上下文的Principal属性访问当前认证主体,具体实现如下:

options.AddEventHandler<ApplyTokenResponseContext>(builder =>
{
    builder.UseInlineHandler(context =>
    {
        // 获取当前已认证的用户主体
        var authenticatedUser = context.Principal;
        if (authenticatedUser != null)
        {
            // 从主体的声明中提取patient标识(SMART Launch标准流程会包含该声明)
            var patientIdClaim = authenticatedUser.Claims.FirstOrDefault(c => c.Type == "patient");
            if (patientIdClaim != null)
            {
                // 将patient ID添加到Token响应参数中
                context.Response.AddParameter("patient", patientIdClaim.Value);
            }
            // 若需自定义逻辑(比如通过用户ID查询关联的patient),可在此扩展
            // 示例:var userId = authenticatedUser.Claims.First(c => c.Type == "sub").Value;
            // var patientId = YourPatientService.GetPatientIdByUserId(userId);
            // context.Response.AddParameter("patient", patientId);
        }
        return default;
    });
});

关键说明

  • context.Principal:这是访问当前认证用户上下文的直接入口,包含了用户所有的认证声明(Claims)。
  • SMART场景适配:在FHIR SMART App Launch流程中,认证完成后,主体会自动携带patient类型的声明,直接提取即可满足需求。
  • 自定义业务逻辑:如果你的系统中需要通过用户ID关联查询patient信息,可以利用主体中的sub(用户唯一标识)声明,调用业务服务获取对应的patient ID后再添加到响应中。

内容的提问来源于stack exchange,提问作者Steve P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 04:14:56