我尝试编写一个'Hello world'类型的练习来学习对OAuth2的Spring Boot支持,以及所需的最低配置。
组件:
预期流程:
401的最后一点失败:无法获取访问令牌。 上次重定向链接为http://localhost:9001/ui/login?code=wcXMG4&state=JEEYqC
我是否天真地认为以下代码和配置应该足以满足我的预期流量?
验证服务器:
@SpringBootApplication
@EnableAuthorizationServer
@EnableResourceServer
@RestController
public class AuthServer {
public static void main(String[] args) {
SpringApplication.run(AuthServer.class);
}
@GetMapping("/whois")
Principal whois(Principal principal) {
return principal;
}
}
验证服务器属性:
server.port=9000
server.contextPath=/sso
security.user.name=joe
security.user.password=password
security.oauth2.client.clientId=SOMEAPP
security.oauth2.client.clientSecret=SECRET
security.oauth2.client.authorized-grant-types=authorization_code,refresh_token,password
security.oauth2.client.scope=read
security.oauth2.resource.userInfoUri=http://localhost:9000/sso/whois
的webapp:
@SpringBootApplication
@EnableOAuth2Sso
@RestController
public class UiServer {
public static void main(String[] args) {
SpringApplication.run(UiServer.class);
}
@GetMapping("/")
String helloWorld(Principal principal) {
return "Yay, auth server provided identity, you are " + principal;
}
}
Webapp属性:
server.port=9001
server.contextPath=/ui
security.oauth2.client.client-id=SOMEAPP
security.oauth2.client.client-secret=SECRET
security.oauth2.client.accessTokenUri=http://localhost:9000/sso/oauth/access_token
security.oauth2.client.userAuthorizationUri=http://localhost:9000/sso/oauth/authorize
security.oauth2.resource.user-info-uri=http://localhost:9000/sso/whois
答案 0 :(得分:0)
启动调试后,发现security.oauth2.client.accessTokenUri不正确。
正确的端点不是... / oauth / access_token,而是...... / oauth / token。 可能我正在看的教程使用了过时的uri。
使用该修复程序,这个最小配置可以达到预期的效果,所以我将结束这个问题。
当您尝试自定义它时,开始真正的乐趣,绕过默认值;对我来说,似乎spring oauth仍然存在重大缺陷,并且需要采用hacky /意外方法在少数用例中解决它们。