安全

如果您的classpath上有spring-security-oauth2,您可以利用一些自动配置,以便轻松设置授权或资源服务器。 有关完整的详细信息,请参阅Spring Security OAuth 2开发人员指南

28.1 安全

28.1.1 Authorization Server

要创建授权服务器并授予访问令牌,您需要使用@EnableAuthorizationServer并提供security.oauth2.client.client-id和security.oauth2.client.client-secret]属性。 客户端将在内存存储库中为您注册。 完成后,您将能够使用客户端凭据创建访问令牌,例如:

    $ curl client:secret@localhost:8080/oauth/token -d grant_type=password -d username=user -d password=pwd

/令牌enpoint的基本认证凭据是client-id和client-secret。 用户凭证是Spring Security的常规用户详细信息(Spring Boot中默认为“user”和随机密码)。 要关闭自动配置并自行配置授权服务器功能,只需添加一个类型为AuthorizationServerConfigurer的@Bean。

28.1.2 Resource Server

要使用访问令牌,您需要一个资源服务器(可以与授权服务器相同)。 创建资源服务器很容易,只需添加@EnableResourceServer并提供一些配置以允许服务器解码访问令牌。 如果你的应用程序也是一个授权服务器,它已经知道如何解码令牌,所以没有什么可做的。 如果您的应用程序是独立服务,那么您需要给它一些更多的配置,以下选项之一:

如果您同时指定了user-info-uri和token-info-uri,那么您可以设置一个标志来表示一个比另一个更喜欢(prefer-token-info = true是默认值)。

或者(而不是user-info-uri或token-info-uri)如果令牌是JWT,您可以配置security.oauth2.resource.jwt.key-value以在本地解码它们(其中键是验证密钥)。 验证密钥值是对称秘密或PEM编码的RSA公钥。 如果你没有密钥,它是公开的,你可以提供一个URI,它可以下载(作为一个JSON对象与一个“值”字段)与security.oauth2.resource.jwt.key-uri。 例如。 在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,授权服务器需要在应用程序启动时运行。 如果它找不到密钥,它会记录一个警告,并告诉你该如何解决它。

28.2 Token Type in User Info

Google和某些其他第三方身份提供商对在用户信息端点的标头中发送的令牌类型名称更严格。 默认是“Bearer”,适合大多数提供商并匹配规范,但如果你需要更改它,你可以设置security.oauth2.resource.token-type。

28.3 自定义用户信息RestTemplate

如果您有user-info-uri,则资源服务器功能在内部使用OAuth2RestTemplate来提取用户详细信息以进行身份验证。 这是作为一个合格的@Bean与id userInfoRestTemplate提供,但你不应该需要知道,只是使用它。 对于大多数提供程序,默认值应该是正常的,但偶尔您可能需要添加额外的拦截器,或更改请求验证器(这是令牌附加到传出请求的方式)。 要添加自定义只需创建一个类型为UserInfoRestTemplateCustomizer的bean - 它有一个方法,将在创建bean之后,但在初始化之前调用。 此处定制的其余模板仅用于内部执行身份验证。

要在YAML中设置RSA键值,请使用“管道”连续标记将其分割到多行(“|”),并记住缩进键值(它是标准的YAML语言特性)。 例: security: oauth2: resource: jwt: keyValue: | -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC... -----END PUBLIC KEY-----

28.3.1 客户端

要将您的网络应用程序转换为OAuth2客户端,您只需添加@ EnableOAuth2Client,Spring Boot就会创建一个OAuth2ClientContext和OAuth2ProtectedResourceDetails,这是创建OAuth2RestOperations所必需的。 Spring Boot不会自动创建这样的bean,但是你可以很容易地创建自己的:

@Bean
public OAuth2RestTemplate oauth2RestTemplate(OAuth2ClientContext oauth2ClientContext,
        OAuth2ProtectedResourceDetails details) {
    return new OAuth2RestTemplate(details, oauth2ClientContext);
}

您可能需要添加限定符并检查您的配置,因为可以在应用程序中定义多个RestTemplate。

此配置使用security.oauth2.client.*作为凭据(与您可能在授权服务器中使用的相同),但此外,它还需要知道授权服务器中的授权和令牌URI。 例如: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
Copyright © www.gitbook.com/@herryZ 2016 all right reserved,powered by Gitbook该文件修订时间: 2017-01-06 08:13:12

results matching ""

    No results matching ""