探索flutter框架开发的app在移动应用市场的潜力与挑战
1831
2022-08-30
23-Spring Authorization Server结合客户端
Spring Authorization Server的服务器已经在上一篇中搭建好了,并注册了一个OAuth2客户端,本篇将利用这个注册的客户端实现HttpSecurity.oauth2Client功能。
本文DEMO:springauthserver 分支。
授权服务器补充配置
上一篇搭建Spring Authorization Server授权服务器如果想投入使用,还要做一个配置。
注册一个用户
OAuth2客户端请求授权跳转到授权服务器,需要一个授权服务器用户登录认证并同意授权。我们在Spring Authorization Server授权服务器中临时指定一个测试用户felord,密码为123456:
@Bean UserDetailsService users() { UserDetails user = User.builder() .username("felord") .password("123456") .passwordEncoder(PasswordEncoderFactories.createDelegatingPasswordEncoder()::encode) .roles("USER") .build(); return new InMemoryUserDetailsManager(user); }
这个用户就是OAuth2中的资源拥有者(Resource Owner)。
OAuth2客户端配置
OAuth2客户端配置简单的多,经历了前面gitee和个性化wechat配置后,配置这个应该不是太难,否则就是你没有好好深入练习。
配置文件
先配置OAuth2客户端的配置文件,这里要对照着Spring Authorization Server中注册的那个OAuth2客户端。这里抄过来对照:
private RegisteredClient createRegisteredClient(final String id) { return RegisteredClient.withId(UUID.randomUUID().toString())// 客户端ID .clientId("felord")// 此处为了避免频繁启动重复写入仓库 .id(id)// client_secret_basic 模式下的密码 在客户端需要存明文 在授权服务器存密文 .clientSecret(PasswordEncoderFactories.createDelegatingPasswordEncoder() .encode("secret"))// 名称可不定义 .clientName("felord")// 授权方法 .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC)// 支持的授权类型 .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE) .authorizationGrantType(AuthorizationGrantType.REFRESH_TOKEN) .authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS)// 回调地址名单,不在此列将被拒绝 而且只能使用IP或者域名 不能使用 localhost .redirectUri(" .redirectUri(" .redirectUri(" .redirectUri(" .redirectUri(" OIDC支持 .scope(OidcScopes.OPENID)// 其它Scope .scope("message.read") .scope("userinfo") .scope("message.write")// JWT的配置项 包括TTL 是否复用refreshToken等等 .tokenSettings(TokenSettings.builder().build())// 配置客户端相关的配置项,包括验证密钥或者 是否需要授权页面 .clientSettings(ClientSettings.builder() .requireAuthorizationConsent(true).build()) .build(); }
对应的yaml配置:
spring: security: oauth2: client: registration: felord: client-id: felord client-secret: secret # redirect-uri: '{baseUrl}/login/oauth2/code/{registrationId}' # 这里不能用localhost redirect-uri: ' authorization-grant-type: authorization_code client-authentication-method: client_secret_basic scope: message.read,message.write provider: felord: issuer-uri: issuer-uri 可以简化下面的配置# authorization-uri: token-uri: user-info-uri: user-name-attribute: username# user-info-authentication-method: GET
/.well-known/oauth-authorization-server端点能替代很多provider的配置项,如果同时存在issuer-uri和其它端点,issuer-uri的优先级要低一些,相关的解析逻辑请参考ClientRegistrations类。
redirect-uri
/foo/bar是一个测试接口:
@GetMapping("/foo/bar") public Map
根据OAuth2ClientConfigurer一文中的讲解,/foo/bar需要配置匿名访问,伪代码:
.authorizeRequests((requests) -> requests// .antMatchers("/foo/bar").anonymous() .antMatchers("/foo/bar") .hasAnyAuthority("ROLE_ANONYMOUS") );
其它的复用前面几个客户端HttpSecurity.oauth2Client()的配置即可。
测试
这里要先启动OAuth2授权服务器,后启动OAuth2客户端,因为客户端需要调用issuer-uri初始化OAuth2授权服务器的信息。
到这里oauth2Client的流程就跑通了。下一篇我将着重对Spring Authorization Server的在该流程中的处理逻辑进行分析。
如果你在学习中遇到问题,可以留言,也可以联系我。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~