我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:六合特肖 > 访问令牌 >

Spring Boot整合Spring Secuty简记-OAuth2(十一)

归档日期:07-19       文本归类:访问令牌      文章编辑:爱尚语录

  OAuth 2.0 Provider机制负责暴露OAuth 2.0受保护的资源。配置包括建立独立OAuth 2.0客户端可以访问受保护资源。提供者(Provider)通过管理和验证OAuth 2.0令牌用于访问受保护的资源。在适用情况下,提供者必须提供一个接口,让用户确认客户端有权限访问受保护的资源。

  OAuth 2.0提供者角色实际上是分开授权服务和资源服务,虽然有时会在同一个应用程序中,但是使用Spring Security OAuth,您可以选择将它们拆分为两个应用程序,还可以有多个共享的资源服务授权服务。对令牌的请求由Spring MVC Controller端点处理,受保护资源的访问由标准的Spring Security请求过滤器处理。为了实现OAuth 2.0授权服务器,Spring Security过滤器链中需要以下端点:

  在配置授权服务器时,必须考虑客户端用来从用户获取访问令牌(例如,授权码,用户凭据,刷新令牌)的授予类型。服务器的配置用于提供客户端详细信息服务和令牌服务的实现。

  提供程序配置的一个重要方面是将授权代码提供给OAuth客户端(在授权代码授权中)的方式。OAuth客户端通过将最终用户导向授权页面来获得授权码,其中用户可以输入其凭证,再从授权服务器重定向到具有授权码的OAuth客户端。

  在创建AuthorizationServerTokenServices实现时,可能要考虑使用DefaultTokenServices可以插入许多策略来更改访问令牌的格式和存储。默认情况下,它通过随机值创建令牌,并处理除委托给它的令牌的持久性以外的所有内容TokenStore。默认存储是一个内存中的实现,还有一些其他的实现可用。

  要使用JWT令牌,需要在授权服务器中使用JwtTokenStore。资源服务器还需要能够对令牌进行解码,因此它们JwtTokenStore依赖JwtAccessTokenConverter,并且Authorization Server和Resource Server都需要相同的实现。令牌是默认签名的,并且资源服务器还必须能够验证签名,因此它需要与授权服务器(共享密钥或对称密钥)相同的对称(签名)密钥,或者它需要公共密钥(验证者密钥)与授权服务器(公私密钥或非对称密钥)中的私钥(签名密钥)相匹配。公共密钥(如果可用)由授权服务器公开/oauth/token_key端点,默认情况下,访问规则为denyAll()。你可以通过注入AuthorizationServerSecurityConfigurer一个标准的SpEL表达式来打开它(例如permitAll())。

  AuthorizationEndpoint可以通过AuthorizationServerEndpointsConfigurer配置支持的授权类型。默认情况下,除了密码之外,所有的授权类型都是受支持的(请参阅下面的关于如何打开的细节)。以下属性影响授权类型:

  注意,授权端点/oauth/authorize(或其映射替代)应该使用Spring Security进行保护,以便只有经过认证的用户才能访问。

  如果资源服务器和授权服务器在同一个应用程序中,那么不必过多考虑DefaultTokenServices,因为它实现了所有必需的接口,因此它自动保持一致。如果资源服务器是一个单独的应用程序,那么必须确保匹配授权服务器的功能,并提供一个ResourceServerTokenServices来知道如何正确解码令牌。与授权服务器一样,可以经常使用DefaultTokenServices和选择大部分通过TokenStore(后端存储或本地编码)表示。另一种方法是RemoteTokenServices这是Spring OAuth功能(不是规范的一部分),允许资源服务器通过授权服务器(/oauth/check_token)上的HTTP资源来解码令牌。RemoteTokenServices如果资源服务器中没有大量的流量(每个请求都必须使用授权服务器进行验证),或者您能负担得起缓存结果,那么这种方法非常方便。要使用/oauth/check_token端点,你需要通过改变它的访问规则(默认为denyAll())中暴露它AuthorizationServerSecurityConfigurer。

  在这个例子中,我们正在配置/oauth/check_token端点和/oauth/token_key端点(所以可信资源可以获得JWT验证的公钥)。这两个端点受到使用客户端凭据的HTTP基本身份验证的保护。

  OAuth 2.0客户端机制负责访问其他服务器的受OAuth 2.0保护的资源。配置涉及建立用户可能访问的相关受保护资源。客户端可能还需要提供用于存储授权代码和用户访问令牌的机制。

  受保护的资源(或“远程资源”)可以定义使用OAuth2ProtectedResourceDetails类型的bean。受保护的资源具有以下属性:

  OAuth2ClientContext放置在会话范围内,以保持不同用户的状态分离。

  一旦你提供了资源的所有配置,你现在可以访问这些资源。用于访问这些资源的建议的方法是通过使用RestTemplate,只需要提供一个OAuth2ProtectedResourceDetails。要将其与用户令牌(授权代码授权)结合使用,您应该考虑使用创建一些请求和会话作用域上下文对象的@EnableOAuth2Client配置(或XML等价物oauth:rest-template/),以便不同用户的请求在运行时不会发生冲突。

  客户端不需要持续令牌,用户在每次重新启动客户端应用程序时都不需要批准新的令牌授予就可以了。ClientTokenServices接口定义的操作是必要的,为特定用户持续OAuth 2.0令牌。提供了一个JDBC实现,但如果您愿意实现自己的服务来将访问令牌和关联的身份验证实例存储在持久数据库中,则可以这样做。如果你想使用这个功能,你需要提供一个专门配置TokenProvider的OAuth2RestTemplate例如:

本文链接:http://shawntierney.com/fangwenlingpai/661.html