快速入门

OAuth2 单点登录

这是一个带有 HTTP Basic 的 Spring Cloud“Hello World”应用程序 authentication 和单个用户帐户:spring-doc.cn

app.groovy
@Grab('spring-boot-starter-security')
@Controller
class Application {

  @RequestMapping('/')
  String home() {
    'Hello World'
  }

}

您可以使用密码(用户名为 “user”)运行它并查看日志。到目前为止,这只是 Spring Boot 应用程序的默认值。spring run app.groovyspring-doc.cn

下面是一个带有 OAuth2 SSO 的 Spring Cloud 应用程序:spring-doc.cn

app.groovy
@Controller
@EnableOAuth2Sso
class Application {

  @RequestMapping('/')
  String home() {
    'Hello World'
  }

}

发现不同之处了吗?此应用程序的行为实际上与 前一个,因为它不知道它是 OAuth2 凭据 还。spring-doc.cn

你可以很容易地在 github 中注册一个应用程序,所以如果你 想要在您自己的域上使用生产应用程序。如果您愿意测试 localhost:8080,然后在应用程序中设置这些属性 配置:spring-doc.cn

application.yml
security:
  oauth2:
    client:
      clientId: bd1c0a783ccdd1c9b9e4
      clientSecret: 1a9030fbca47a5b2c28e92f19050bb77824b5ad1
      accessTokenUri: https://github.com/login/oauth/access_token
      userAuthorizationUri: https://github.com/login/oauth/authorize
      clientAuthenticationScheme: form
    resource:
      userInfoUri: https://api.github.com/user
      preferTokenInfo: false

运行上面的应用程序,它将重定向到 GitHub 进行授权。如果 您已经登录了 GitHub,您甚至不会注意到它已经 认证。这些凭证仅在您的应用 在端口 8080 上运行。spring-doc.cn

限制客户端在获取访问令牌时请求的范围 您可以设置 (逗号分隔或 YAML 中的数组)。由 default 范围为空,由 Authorization Server 决定 确定默认值,通常取决于 它持有的客户端注册。security.oauth2.client.scopespring-doc.cn

上面的示例都是 Groovy 脚本。如果要编写 在 Java(或 Groovy)中,您需要添加 Spring Security OAuth2 的相同代码 添加到 Classpath 中(例如,请参阅此处的示例)。

OAuth2 受保护的资源

您想使用 OAuth2 令牌保护 API 资源吗?这是一个 简单示例(与上面的客户端配对):spring-doc.cn

app.groovy
@Grab('spring-cloud-starter-security')
@RestController
@EnableResourceServer
class Application {

  @RequestMapping('/')
  def home() {
    [message: 'Hello World']
  }

}
application.yml
security:
  oauth2:
    resource:
      userInfoUri: https://api.github.com/user
      preferTokenInfo: false