在同一应用程序中通过Spring安全性支持多个grant_type

时间:2020-08-20 03:47:53

标签: spring spring-boot spring-security oauth-2.0 spring-security-oauth2

在Spring Security中,应用程序是否可以容易地配置为使用两种不同的 grant_type

我们的Java BE应用程序将通过Angular FE应用程序供2种不同类型的用户使用。用户类型定义为请求标头:

  • 员工:必须使用 authorization_code 进行身份验证。
  • Internet上的一般用户:他们通过 client_credentials 进行身份验证。

我们设法在application.properties中定义了它:

#employee user
spring.security.oauth2.client.registration.employee.authorization-grant-type=authorization_code
spring.security.oauth2.client.provider.employee.authorization-uri=https://saml.company.com/oauth/authorize
spring.security.oauth2.client.registration.employee.redirect-uri=https://appDomain.com/appContext/login/oauth2/code/employee
spring.security.oauth2.client.provider.employee.token-uri=https://saml.company.com/oauth/token
spring.security.oauth2.client.registration.employee.scope=theScope
spring.security.oauth2.client.registration.employee.client-id=CLIENT_ID1
spring.security.oauth2.client.registration.employee.client-secret=SECRET

#general user
spring.security.oauth2.client.registration.direct.authorization-grant-type=client_credentials
spring.security.oauth2.client.provider.direct.token-uri=https://saml.company.com/oauth/token
spring.security.oauth2.client.registration.direct.client-id=CLIENT_ID2
spring.security.oauth2.client.registration.direct.client-secret=SECRET

与此相关的主要问题是,两种用户类型(员工和普通用户)的未声明的调用都被重定向到标准的Spring / login页面,该页面显示2个HTML锚链接,指向2个不同的flow / grant_type。

所需的行为是:

  • 让员工用户直接重定向到 spring.security.oauth2.client.provider.employee.authorization-uri ,以便根据 authorization_code < / em>流。
  • 对于一般用户,BE应该处理 client_credentials 流,因为没有用户交互。

我们尝试使用过滤器来避免/ login重定向无效。有什么想法吗?

0 个答案:

没有答案