Spring Cloud OAuth2:密码授权类型和资源安全

Spring Cloud OAuth2: Password grant type & resource security

我有两个关于 spring-cloud-security 与 OAuth2 的问题:

  1. 如何通过 grant_type 保护资源?我想用 client_credentials 保护我的 REST API,然后想通过密码授予类型保护用户特定的资源。这可能吗?

  2. 根据 this 教程,密码授予类型不需要客户端密码,尽管 spring cloud oauth2 似乎总是需要客户端密码。我该如何处理?通过设置一个像 "abc" 这样的无意义的客户端秘密并且根本不关心它?

  3. 如果我有一个带有@EnableOAuth2Sso 的客户端应用程序,尽管我不提供授权类型"authorization code",但我只会重定向到授权Uri。如果我只提供密码授权类型,我被重定向到令牌 Uri 不是更有意义吗?

谢谢

How do I protected resources by a grant_type? I want to secure my REST API with client_credentials

使用 OAuth2 访问规则并指定您只需要客户端。例如。使用 #oauth2 表达式变量和 #oauth2.isClient() (source code here).

the password grant type does not need a client secret

错了。您需要对客户端进行身份验证。如果它没有密码,它就不是很安全,但如果你愿意,你可以这样做(使用空密码)。

If I have a client app with @EnableOAuth2Sso I only get a redirect to the authorization Uri although I dont provide grant type "authorization code". Wouldn't it make more sense if I was redirected to the token Uri if I only provide the password grant type?

不,令牌端点是一个反向通道,它不是那样工作的(即使假设您允许从 GET 授予令牌,用户会如何处理响应?)。外部 Web 应用程序没有使用密码授权的协议(它主要用于本机应用程序)。在 Web 应用程序中,您应该使用授权码。