如何配置HAPI FHIR的OpenApiInterceptor实现Swagger身份认证
HAPI FHIR OpenAPI 隐式流认证配置方案
你可以通过自定义OpenApiInterceptor加载的OpenAPI元数据,添加OAuth2隐式流的安全配置,完整实现代码如下:
import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.info.Info; import io.swagger.v3.oas.models.security.OAuthFlow; import io.swagger.v3.oas.models.security.OAuthFlows; import io.swagger.v3.oas.models.security.Scopes; import io.swagger.v3.oas.models.security.SecurityRequirement; import io.swagger.v3.oas.models.security.SecurityScheme; import ca.uhn.fhir.rest.server.interceptor.OpenApiInterceptor; @Override protected void initialize() throws ServletException { // ... 原有资源提供方定义代码 ... // 构建自定义OpenAPI配置 OpenAPI openApi = new OpenAPI(); // 基础信息配置可根据你的需求修改 openApi.setInfo(new Info().title("FHIR R4 服务接口").version("1.0")); // 配置OAuth2隐式流安全方案 SecurityScheme oauth2Scheme = new SecurityScheme() .type(SecurityScheme.Type.OAUTH2) .flows(new OAuthFlows() .implicit(new OAuthFlow() .authorizationUrl("你的IDP授权端点地址") .scopes(new Scopes() // 根据你的业务需求添加所需scope .addString("fhir.read", "FHIR资源读取权限") .addString("fhir.write", "FHIR资源写入权限") ) ) ); openApi.getComponents().addSecuritySchemes("oauth2_implicit", oauth2Scheme); // 全局应用安全要求,所有接口都需要认证 openApi.addSecurityItem(new SecurityRequirement().addList("oauth2_implicit")); // 注册带自定义配置的拦截器 OpenApiInterceptor openApiInterceptor = new OpenApiInterceptor(); openApiInterceptor.setOpenApi(openApi); registerInterceptor(openApiInterceptor); }
完成上述配置后,Swagger UI页面右上角会出现认证按钮,点击后即可跳转IDP完成隐式流认证,后续请求会自动携带获取到的Access Token访问FHIR端点。
注意事项
- 代码中的
你的IDP授权端点地址需替换为你实际使用的IDP隐式流授权入口 - 需提前在IDP后台将Swagger UI的访问地址添加到隐式流的授权回调白名单
- 若使用Spring Security作为权限管控框架,需放行Swagger相关静态资源路径,确保未认证时可正常打开Swagger页面
- FHIR端点的权限校验需配合对应的认证拦截器实现,确保能正确解析请求头中的Bearer Token完成权限校验
内容的提问来源于stack exchange,提问作者cobolstinks
相关产品推荐
相关产品推荐

