针对Azure OIDC OAuth2流的Spring安全性

时间:2018-04-18 20:35:25

标签: spring-boot spring-security oauth-2.0 azure-ad-b2c oidc

真正的问题,我本来可以问,为什么我在对授权端点的响应中只获得了id_token?并且,最好在天蓝色的stackoverflow空间中创建。

对于上下文,原始问题更多是关于自定义策略。其中,进一步研究确定不是必要的。

我一直在阅读Spring安全参考指南的OAuth2 / OIDC功能 - 5.7 OAuth 2.0 Login31. OAuth 2.0 Login — Advanced Configuration和github OAuth2 Login Samples试图找出如何扩展或者为Microsofts Azure OIDC API创建自定义实现 - Authorize access to web applications using OpenID Connect and Azure Active Directory

这些是观察。一般来说,我根据我的实验看到了什么,以及基于Spring安全行为和Microsoft Understanding OpenID Connect Protocol指南文档我认为是真实的。

Azure针对/ authorization端点的登录请求对其登录请求有3个细微差别,目前Spring Security 5代码库中不支持这些细微差别。

  • “response_type” - Microsoft OIDC API允许id_token或id_token +代码... Spring Security支持“代码”或“令牌”OOTB。 (id_token为您提供id_toke,id_token +代码将为您提供id_toke和代码。您可以交换访问令牌的代码。
  • “response_mode” - Microsoft OIDC API建议使用response_mode = form_post ...这不支持OOTB Spring Security。
  • “nonce” - Microsoft OIDC API建议使用nonce = [unique_value] ...这不支持OOTB Spring Security。

我已经创建了一个分支,以查看支持上述内容所需的增强功能。我相信他们会的。

弹簧安全的oauth2芯

OAuth2AuthorizationResponseType - 包含其他类型。

OAuth2AuthoriztionRequest - 包括对nonce和responseMode的支持

的oauth2的客户端

OAuth2AuthoriationRequestRedirectFilter

OAuth2AuthorizationRequestUriBuilder

一种自动配置适当选项的机制。

乍一看支持这些参数的变化似乎微不足道。但是,春季安全中的类是最终的,因此扩展的范围要大得多。

任何人对定制策略都有任何建议吗?在不复制代码库的情况下,创建自定义配置以支持细微差别的建议方法是什么?

1 个答案:

答案 0 :(得分:0)

随着juunas的线索...我意识到我的问题与我在azure b2c刀片中注册我的应用程序时没有创建api范围的事实有关。因此,问题不是弹簧安全配置。但是,缺少范围的结果。

顺便提一下,Microsoft了解OpenID Connect协议指南中的获取访问令牌部分," ...通过在请求中包含权限范围并使用response_type = code + id_token,授权端点确保用户已同意到范围查询参数中指示的权限,并返回您的应用程序授权代码以交换访问令牌。"

每个juunas,这也发生在response_type = code时。 -