1

我们有几种用户类型

  • 内部用户(使用 Active Directory 进行身份验证)
  • 外部用户/客户端(存储在 DB1 中)
  • 外部用户/供应商(存储在 DB2 中)

我们计划使用 Spring Security OAuth2 生成 GWT 令牌,然后可以使用它来调用一组 web 服务

我可以使用多个 AuthenticationProviders(LDAPAuthenticationProvider 和两个 DAOAuthenticationProviders),但是我们将失去让用户同时成为客户端和供应商的能力(如果他们使用相同的电子邮件进行身份验证)。因为一旦身份验证成功,它将停止轮询提供程序。

我还可以使用配置文件 @Profile="vendor/client" 并专门为客户端或供应商身份验证启动身份验证服务器 - 但这意味着两个不同的进程 = 更多维护。

还有其他想法吗?有人遇到过类似的事情吗?

4

1 回答 1

0

我能想到几个选择:

1 - 如果每种不同类型的用户使用不同的客户端 ID,则在加载它们时在客户端详细信息中设置一些内容,以显示用户应如何为客户端进行身份验证。ClientDetails 上有一个 getAdditionalInformation() 方法,它返回一个可用于存储此信息的 Map

/**
 * Additional information for this client, not needed by the vanilla OAuth protocol but might be useful, for example,
 * for storing descriptive information.
 * 
 * @return a map of additional information
 */
Map<String, Object> getAdditionalInformation();

2 - 传入一个标头或请求参数,然后 AuthenticationProvider 可以使用这些参数来确定如何验证该用户。您需要配置自己的 WebAuthenticationDetails 实现以从请求中检索此信息。

这应该可以通过在传递给 AuthenticationProvider 的 authenticate() 方法的 Authentication 对象上调用 getDetails() 来获得。

于 2016-03-15T13:04:42.803 回答