【问题标题】:Spring Cloud OAuth2: Password grant type & resource securitySpring Cloud OAuth2:密码授予类型和资源安全
【发布时间】:2015-05-20 12:11:54
【问题描述】:
我有两个关于使用 OAuth2 的 spring-cloud-security 的问题:
如何通过 grant_type 保护资源?我想用 client_credentials 保护我的 REST API,然后想通过密码授予类型保护用户特定的资源。这甚至可能吗?
根据this 教程,密码授予类型不需要客户端密码,尽管 spring cloud oauth2 似乎总是需要客户端密码。我该如何处理?通过设置诸如“abc”之类的无意义的客户端密码而不关心它?
如果我有一个带有 @EnableOAuth2S 的客户端应用程序,我只会重定向到授权 Uri,尽管我没有提供授权类型“授权代码”。如果我只提供密码授权类型,那么如果我被重定向到令牌 Uri 会不会更有意义?
谢谢
【问题讨论】:
标签:
oauth-2.0
single-sign-on
spring-security-oauth2
spring-cloud
【解决方案1】:
如何通过 grant_type 保护资源?我想用 client_credentials 保护我的 REST API
使用 OAuth2 访问规则并指定您只需要客户端。例如。使用#oauth2 表达式变量和#oauth2.isClient() (source code here)。
密码授权类型不需要客户端密码
错了。您需要对客户端进行身份验证。如果它没有密码,则不是很安全,但如果您愿意,您可以这样做(使用空密码)。
如果我有一个带有 @EnableOAuth2S 的客户端应用程序,那么我只会重定向到授权 Uri,尽管我没有提供授权类型“授权代码”。如果我只提供密码授权类型,那么如果我被重定向到令牌 Uri 不是更有意义吗?
不,令牌端点是一个反向通道,它不能像那样工作(即使您允许从 GET 授予令牌,用户会如何处理响应?)。外部 Web 应用程序没有使用密码授权的协议(主要用于本机应用程序)。在 Web 应用程序中,您应该使用身份验证代码。