我可以使用Azure Active Directory库(ADAL)从Azure AD获取SAML响应吗?

时间:2019-09-10 20:44:45

标签: azure saml adal

我想编写一个脚本,

  1. 使用device code mechanism
  2. 将用户登录到Azure AD
  3. 构造一个SAML SSO request URL
  4. 使用第1步中的身份验证发出SAML请求
  5. 取回SAML响应,并对其进行处理(不仅仅是在浏览器中打开)

是否可以使用Azure AD库做到这一点?

我觉得这应该可行,而我只是想念一些东西。有任何想法吗? 我尝试了很多东西,并尝试了Python库中的代码,但无济于事。

我更喜欢Python,但是我可以在Docker映像中运行它,因此语言并不是那么重要。


上下文

在工作中,我们使用Azure AD进行身份验证,并且可以使用Azure AD和SSO SAML登录到AWS控制台。

如果我构建了一个适当的SAML请求URL并在浏览器中将其打开,则将通过浏览器内身份验证流程。登录后,Azure AD返回一个SAML响应,最终我的浏览器将我重定向到AWS控制台。这是以下格式的网址:

https://login.microsoftonline.com/11111111-1111-1111-11111111111/saml2?SAMLRequest=<base64 encoded string>

现在,我想对AWS凭证执行类似的流程–发出SAML请求以登录,读取SAML响应,使用assume_role_with_saml创建凭证,然后将其写入~/.aws/credentials。我认为这意味着我必须直接访问SAML响应-浏览器只是将我放在重定向链的末尾。

有什么想法吗?


其他想法

  • 我知道aws-azure-login npm package是通过旋转无头浏览器来完成此操作的-但它并没有得到维护,我发现它很笨拙。

  • 现在,我有一个Python脚本,该脚本可在Chrome(我登录的地方)中打开SAML请求,然后使用browsercookie library突袭Chrome的cookie罐并将其用于HTTP请求。可以,但是以这种方式复制cookie感觉很奇怪。另外,如果我将SSH服务器连接到远程服务器,则无法使用。

  • 我从a year and a half ago找到了一个答案,说“ ADAL.JS不支持SAML2令牌”。想知道这是否可能会改变,还是我仍然坚持下去?

2 个答案:

答案 0 :(得分:1)

否-ADAL是OpenID Connect,并返回JWT令牌。

为什么需要使用SAML?您不能使用OpenID Connect吗?

答案 1 :(得分:0)

Azure AD不支持device code flow的SAML令牌。

Azure AD团队的

MSAL库支持此应用程序流程。请尝试一下,否则您可以针对protocol本身编写代码