OAuth2服务器和客户端的最小Spring启动配置

时间:2017-04-01 00:55:04

标签: spring-oauth2

我尝试编写一个'Hello world'类型的练习来学习对OAuth2的Spring Boot支持,以及所需的最低配置。

组件:

  • 授权服务器
  • webapp,它将调用auth服务器对用户进行身份验证,并将迎接他

预期流程:

  • 我打开webapp
  • 我被重定向到auth服务器
  • 我登录auth服务器
  • 我批准了所要求的范围
  • 我被重定向回webapp
  • 我看到一个问候语(webapp应该从auth服务器获取我的用户名)

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

1 个答案:

答案 0 :(得分:0)

启动调试后,发现security.oauth2.client.accessTokenUri不正确。

正确的端点不是... / oauth / access_token,而是...... / oauth / token。 可能我正在看的教程使用了过时的uri。

使用该修复程序,这个最小配置可以达到预期的效果,所以我将结束这个问题。

当您尝试自定义它时,开始真正的乐趣,绕过默认值;对我来说,似乎spring oauth仍然存在重大缺陷,并且需要采用hacky /意外方法在少数用例中解决它们。