81. Quickstart
81.1 OAuth2 单点登录
这是具有 HTTP Basic 身份验证和单个用户帐户的 Spring Cloud“ Hello World”应用程序:
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 上运行时,这些凭据才有效。
要限制 Client 端获得访问令牌时要求的范围,可以设置security.oauth2.client.scope
(逗号分隔或 YAML 中的数组)。默认情况下,作用域为空,并且由授权服务器决定默认值是什么,通常取决于它所拥有的 Client 端注册中的设置。
Note
上面的示例都是 Groovy 脚本。如果要使用 Java(或 Groovy)编写相同的代码,则需要将 Spring Security OAuth2 添加到 Classpath(例如,参见sample here)。
81.2 OAuth2 受保护的资源
您想使用 OAuth2 令牌保护 API 资源吗?这是一个简单的示例(与上面的 Client 端配对):
app.groovy.
@Grab('spring-cloud-starter-security')
@RestController
@EnableResourceServer
class Application {
@RequestMapping('/')
def home() {
[message: 'Hello World']
}
}
and
application.yml.
security:
oauth2:
resource:
userInfoUri: https://api.github.com/user
preferTokenInfo: false