我有一个本地 SAML2.0 身份提供商。此身份提供者的登录页面,对本地主机服务器进行 Ajax 调用。您可以假设在每个用户计算机上,本地主机服务器将侦听传入流量。
当用户尝试使用 chrome/edge 登录时,我在 localhost API 处遇到断点,一切都按预期工作。
当我尝试登录微软团队桌面应用程序时,输入电子邮件 ID 后,微软将我重定向到我的 SAML 身份提供商登录页面并触发 ajax 调用。但没有调用 localhost API。
我在localhost API调用中添加了CORS,并在allow-origin中添加了SAML身份域名。
下面是ajax调用:
$.ajax({
url: "https://localhost/auth",
type: 'GET',
success: successCb,
crossDomain:true,
error: function (xhr, exe) {
window.location.href = 'https://parent.abc.com/sso/mobile/auth/showerror1?status=' + xhr.status + '&error='+exe;
}
});
在上面的ajax中,当尝试从浏览器登录时,会触发successCb,但使用微软登录弹出窗口时,总是会执行错误。
无法理解这里出了什么问题。
使用外部 SAML 身份提供商的 Microsoft Teams 桌面应用程序登录弹出窗口中未发生 Ajax 调用的问题是由于严格的 CORS 策略造成的。要解决此问题,请按照以下步骤操作:
authentication.authenticate
启动外部身份验证登录流程,将 isExternal
设置为 true,并适当处理响应。authentication.authenticate({
url: `${window.location.origin}/auth-start?oauthRedirectMethod={oauthRedirectMethod}&authId={authId}&hostRedirectUrl=${url}&googleId=${googleId}`,
isExternal: true
}).then((result) => {
this.getGoogleServerSideToken(result);
}).catch((reason) => {
console.log("Authentication failed: " + reason);
});
其他资源:
遵循这些步骤可确保 Microsoft Teams 桌面应用程序与外部 SAML 身份提供商实现无缝登录体验。