如果您的类路径上有’spring-security-oauth2’,您可以利用一些自动配置来使设置授权或资源服务器变得容易。 详细信息请见 Spring Security OAuth 2 Developers Guide.
使用’@EnableAuthorizationServer’注解 并设置’security.oauth2.client.client-id’和’security.oauth2.client.client-secret’属性来创建授权服务器并授予你需要使用的访问令牌 。客户端将为您注册在内存仓库中。
完成后,您将能够使用客户端凭据创建访问令牌,例如:
$ curl client:[email protected]/* */:8080/oauth/token -d grant_type=password -d username=user -d password=pwd
‘/ token’端点的基本认证凭证是’client-id’和’client-secret’。用户证书是Spring Security的标准用户详细信息(在Spring Boot中用户名默认是’user’以及随机的密码)。
要关闭自动配置并自行配置授权服务器功能,只需添加类型为’AuthorizationServerConfigurer’的’@Bean’。
要使用访问令牌,您需要一个资源服务器(可以与授权服务器相同)。创建资源服务器很容易,只需添加’@EnableResourceServer’注解并提供一些配置以允许服务器解码访问令牌。如果你的应用程序也是一个授权服务器,它会知道如何解码令牌,所以不必做任何事情。如果您的应用程序是独立服务,那么您需要给它更多的配置,如以下选项之一:
- 使用’/ me’资源’的security.oauth2.resource.user-info-uri’(例如在PWS上的’https://uaa.run.pivotal.io/userinfo’)
- 使用令牌来解码端点的’security.oauth2.resource.token-info-uri’(例如,PWS上的’https://uaa.run.pivotal.io/check_token’)。
如果你同时指定’user-info-uri’和’token-info-uri’,你可以设置一个标志来标示更喜欢哪个(’prefer-token-info = true’是默认值) 。
或者(如果令牌是JWT,而不是’user-info-uri’或’token-info-uri’的话)可以配置“security.oauth2.resource.jwt.key-value”以便在本地解码它们(其中键是验证密钥)。验证密钥值要么是对称机密,要么是PEM编码的RSA公钥。 如果你没有密钥,它将是公开的,你可以提供一个带有’security.oauth2.resource.jwt.key-uri’的URI从那里下载(作为一个带有’value’字段的JSON对象)。例如。 在PWS上:
$ curl https://uaa.run.pivotal.io/token_key {"alg":"SHA256withRSA","value":"-----BEGIN PUBLIC KEY-----/nMIIBI.../n-----END PUBLIC KEY-----/n"}
警告 | |
---|---|
如果使用’security.oauth2.resource.jwt.key-uri’,授权服务器需要在应用程序启动时运行。 如果它找不到key那么它会记录一个警告日志,并告诉你该怎么做来修复这个问题。 |
Google和某些其他第三方身份提供商,对头部中发送到用户信息端点的令牌类型名称更严格。默认值为“Bearer”,它适合大多数供应商和匹配的规范,如果你需要更改它,你可以设置“security.oauth2.resource.token-type”。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/114011.html