使用 Spring Oauth2 实现 SAML 断言流

Posted

技术标签:

【中文标题】使用 Spring Oauth2 实现 SAML 断言流【英文标题】:Implementing a SAML assertion flow with Spring Oauth2 【发布时间】:2015-05-12 08:22:15 【问题描述】:

我需要使用 Spring OAuth2 Authorization Server 实现 SAML 断言流。我正在努力解决如何将这两个项目联系起来。 我也尝试将 SAML securityContext 导入到我的 OAuth 项目中,但似乎 SAML 流将始终优先。有没有办法做到这一点,它会查看 grant_type 以确定它是否应该使用 saml 流。

另外,当它处理 saml 断言时,它会与 ResourceOwnerPasswordTokenGranter 绑定,还是我必须使用类似的东西注册一个自定义令牌授予者?

 With OAuth2, we have a way of registering different TokenGranters through something like this:

 List<TokenGranter> tokenGranters = new ArrayList<TokenGranter>();
    tokenGranters.add( endpoints.getTokenGranter());
    tokenGranters.add(new SamlTokenGranter(authenticationManager,tks,cds,endpoints.getOAuth2RequestFactory()));
    CompositeTokenGranter ctg = new CompositeTokenGranter(tokenGranters);
    endpoints.tokenGranter(ctg);

提前感谢您提供的任何帮助

【问题讨论】:

【参考方案1】:

您可能需要注册一个自定义TokenGranterCompositeTokenGranter(默认值)可以按照您的建议处理多种授权类型(将传入的请求 grant_type 与每个授权者支持的比较)。如果您使用 Spring SAML 作为服务提供者来检查断言,那么我想您还需要在 /token 端点上将其设置为单独的安全过滤器(使用非常具体的请求匹配器,因此它只拦截 SAML 授权)。

【讨论】:

P.S.我很想看到这个工作,所以请坚持下去,也许我们可以通过框架分享结果。

以上是关于使用 Spring Oauth2 实现 SAML 断言流的主要内容,如果未能解决你的问题,请参考以下文章

单个 Spring Boot 应用程序中的 SAML 和 Oauth2

Spring Boot/Angular整合Keycloak实现单点登录

在使用 Oauth、SAML 和 spring-security 的多租户的情况下从 spring-security.xml 中获取错误

Spring - 如何使用 SAML 2.0 实现单点登录

Spring SAML 实现无法解析对 bean 的引用

SAML和OAuth2这两种SSO协议的区别