OAuth2 - wzz-code/cloud-security-sample GitHub Wiki

OAuth2单点登录

这里是一个Spring Cloud “Hello World”应用程序,使用HTTP基本身份验证和单个用户账户:

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

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

你可以使用spring run app.groovy运行它,并观察密码的日志(用户名是“user”)。到目前为止,这只是Spring Boot应用程序的默认值。

以下是采用OAuth2 SSO的Spring Cloud应用程序:

app.groovy
@Controller
@EnableOAuth2Sso
class Application {

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

指出不同?这个应用程序的行为与上一个应用程式完全相同,因为它不知道它是OAuth2凭证。

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

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上运行时才有效。

要限制客户端在获取访问令牌时请求的范围,您可以设置 security.oauth2.client.scope (逗号分隔或YAML的数组)。

默认情况下,作用域为空,它由授权服务决定默认值应该是什么,通常取决于它保存的客户端注册中的设置。

上面的例子都是Groovy脚本。如果要在Java(或Groovy)中编写相同的代码,则需要将Spring Security OAuth2添加到类路径(例如,参见此处的示例)。

OAuth2受保护资源

您想使用OAuth2令牌保护API资源?这里有一个简单的例子(与上面客户端配对):

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

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

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