Micronaut应用中为Swagger静态资源配置Basic认证方案
在Micronaut中同时使用Bearer(JWT)和Basic认证保护不同资源
要实现控制器用JWT Bearer认证、Swagger静态资源用Basic认证的需求,你需要启用Micronaut的多认证模式,并针对不同路径指定对应的认证提供者。具体步骤如下:
1. 添加必要依赖
首先确保你的项目包含Basic认证和密码加密的依赖(以Gradle为例):
implementation("io.micronaut.security:micronaut-security-basic") implementation("io.micronaut.security:micronaut-security-password-encoder")
如果使用Maven,对应依赖如下:
<dependency> <groupId>io.micronaut.security</groupId> <artifactId>micronaut-security-basic</artifactId> </dependency> <dependency> <groupId>io.micronaut.security</groupId> <artifactId>micronaut-security-password-encoder</artifactId> </dependency>
2. 修改配置文件(application.yml)
更新你的配置,启用多认证模式,配置Basic认证用户,并为不同路径指定认证方式:
micronaut: router: static-resources: default: paths: classpath:META-INF/static mapping: /static/** swagger: paths: classpath:META-INF/swagger mapping: /swagger/** redoc: paths: classpath:META-INF/swagger/views/redoc mapping: /redoc/** rapidoc: paths: classpath:META-INF/swagger/views/rapidoc mapping: /rapidoc/** swagger-ui: paths: classpath:META-INF/swagger/views/swagger-ui mapping: /swagger-ui/** security: authentication: multiple # 启用多认证模式 providers: [bearer, basic] # 注册Bearer和Basic认证提供者 endpoints: login: enabled: true oauth: enabled: true keys: enabled: true token: jwt: enabled: true signatures: secret: generator: secret: 'itsmysecret' generator: access-token: expiration: 600 # 10min refresh-token: secret: 'itsmysecret' enabled: true # 配置Basic认证的内存用户(密码用BCrypt加密,可自行生成哈希值) users: swagger-admin: password: '$2a$10$EixZaY3sT7ybzJ9jS5pZ/.Vx5pK8hL5W9y3e8eY7y8eY7y8eY7y8e' # 示例密码:swagger123 roles: - ADMIN intercept-url-map: # Swagger相关路径要求Basic认证 - pattern: /swagger-ui/** http-method: GET access: - isAuthenticated() authProvider: basic - pattern: /swagger/** http-method: GET access: - isAuthenticated() authProvider: basic - pattern: /redoc/** http-method: GET access: - isAuthenticated() authProvider: basic - pattern: /rapidoc/** http-method: GET access: - isAuthenticated() authProvider: basic # 静态资源和健康检查保持匿名访问 - pattern: /static/** http-method: GET access: - isAnonymous() - pattern: /health/** http-method: GET access: - isAnonymous() # 控制器API路径要求Bearer认证(根据你的实际API路径调整) - pattern: /api/** http-method: ANY access: - isAuthenticated() authProvider: bearer
关键配置说明
security.authentication: multiple:告诉Micronaut允许同时使用多种认证方式security.providers:指定要启用的认证提供者,这里包含bearer(对应JWT)和basicsecurity.users:配置用于Basic认证的用户,密码必须是加密后的格式(示例用BCrypt,你可以用在线工具生成自己的密码哈希)intercept-url-map中的authProvider字段:为每个路径指定对应的认证方式,Swagger路径用basic,API路径用bearer
这样配置后,用户访问Swagger相关资源时需要输入Basic认证的用户名和密码,而访问受保护的API控制器时则需要提供JWT Bearer令牌。
内容的提问来源于stack exchange,提问作者Stefan Urbansky
相关产品推荐
相关产品推荐

