是否有可能获得可供浏览器客户端使用的一次性签名URL,该URL会自动对浏览器会话进行身份验证并重定向到saml2集成资源?目前,我有一个使用saml2的应用程序集成(App A)设置,该应用程序使用azure广告作为其身份提供者。因此,对它的所有未经身份验证的请求都将重定向到azure广告登录页面,然后在验证用户凭据提交后,将使用SAML2重定向到App A。
我还有一个使用自己的凭据提供程序的Web应用程序(应用程序B)。我希望使用Azure广告中的特殊用户设置自动对App B中的一部分帐户进行身份验证,然后以该特殊用户的身份重定向到AppA。
我在Azure AD门户中配置了一个新的应用程序集成,为我提供了客户端ID和客户端密码。我可以在Postman中成功使用它来执行Oauth2 / token请求。响应中包含一个承载令牌和一些cookie。问题是,如果我使用ajax / xhr命令尝试相同的请求,则会遇到CORs错误,并且浏览器从不尝试POST请求。我知道将客户端机密传递给客户端脚本是不明智的,但这是我看到的唯一尝试设置cookie的API,我认为我需要完成这项工作。我可以使用服务器端代码来检索此访问令牌并将其传递给客户端脚本,但是我认为这没有用。除非有某种办法,否则我可以使用它通过特殊的一次性链接将浏览器重定向到Azure AD登录页面本身,该链接将静默地对令牌进行身份验证并将cookie设置为浏览器会话。
有什么可能吗?
答案 0 :(得分:1)
这是您尝试使用的客户端凭据流,并且决不打算在前端(公共客户端)使用。我也很确定它不会设置任何有用的cookie,因为它是服务主体(仅应用程序)身份验证,没有用户参与。
不,您不能以任何方式跳过交互式身份验证以在Azure AD上获取正确的会话cookie;用户必须登录。
您可以通过将login_hint=user@company.com
放在授权URI中来指定用户帐户。
然后,用户仅需输入密码即可(如果启用了,则可以通过MFA进行操作)。
如果此时用户在Azure AD上具有活动会话,则他们将以静默方式登录。
主要问题在于,要针对Azure AD登录,用户必须针对Azure AD登录:) 基本上,您不能为他们做。 好的,可以使用“资源所有者密码凭证授予”流(ROPC)来完成非交互式身份验证,但这仅为您提供令牌,而不会创建会话cookie。 如果用户具有MFA /已联合/密码已过期等,则此功能将不起作用。 通常,应该避免这种流程,并且我认为这对您而言没有用,因为应用A必须从中获取结果令牌。 而且您也不能从前端JS中做到这一点:)