在ADAL.js的登录()后的回调未在Edge中调用
问题描述:
我正在使用ADAL.js(它调用Azure Active Directory)作为验证用户的JavaScript库。我使用下面的代码是:在ADAL.js的登录()后的回调未在Edge中调用
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<script src="https://secure.aadcdn.microsoftonline-p.com/lib/1.0.15/js/adal.min.js"></script>
<script>
var endpoints = {
"https://management.core.windows.net": "https://management.core.windows.net"
};
var config = {
clientId: 'e333d3fe-a73a-4476-8121-8a57f9a972ca',
endpoints: endpoints,
};
var authContext = new AuthenticationContext(config);
authContext.handleWindowCallback();
function onSuccessLogin(error, token, msg) {
console.log("Inside Call back");
if (!!token) {
console.log("Log-in to Azure successfully done", token);
}
else {
console.log("Error while log-in to Azure", error);
}
if (!!authContext._user) {
console.log("You are connected to Azure ")
}
}
function login() {
authContext.popUp = true;
authContext.callback = onSuccessLogin;
authContext.login();
// authContext.handleWindowCallback();
var user = authContext.getCachedUser();
console.log(user);
};
function logout() {
authContext.logout();
};
</script>
<input id="Button1" type="button" value="clickme" onclick="clickme()" />
<input id="Button3" type="button" value="login" onclick="login()" />
<input id="Button2" type="button" value="logout" onclick="logout()" />
// These are the text-boxes whose value I want to retain.
First name:<br>
<input id=fname" type="text" name="firstname" value="Mickey">
<br>
Last name:<br>
<input id="lname" type="text" name="lastname" value="Mouse">
</body>
</html>
这些都是与此代码在边缘几个问题,但一切都在Chrome中工作正常:
- 为什么onSuccessLogin()并不总是叫上边缘?
- 为什么登录弹出窗口并不总是出现?
- 进入凭证后的某个时间,流行音将不会关闭。
答
什么工作对我来说是:
- 设置
config.callback
和popUp=true
之前调用AuthenticationContext(配置)
而且你不应该叫handleWindowCallback()如果网址不包含#。该代码应该是: if (authenticationContext.isCallback(window.location.hash)) { authenticationContext.handleWindowCallback();
我建议你看看,适应我测试了以下样品,并在边工作(当然Chrome浏览器),在两种情况下(有和没有弹出): https://github.com/Azure-Samples/active-directory-dotnet-webapi-onbehalfof-ca/blob/master/TodoListSPA/app.js (中配置是在https://github.com/Azure-Samples/active-directory-dotnet-webapi-onbehalfof-ca/blob/master/TodoListSPA/appconfig.js)
我检查了示例链接,完全按照您的建议完成。现在,登录用户在边缘工作正常。但在边缘的私密窗口中,回调从不会被调用。弹出窗口不会关闭,弹出窗口的URL变为:https:// localhost:44315 /#id_token = eyJ0eXsV1cQiLPCJhxbGciOiJSUzI1NiIsI ....................... –
是的,Edge存在已知问题(不是由于库):当您在InPrivate中跨区域重定向时,本地和会话存储会丢失。 Edge正在努力在未来的版本中修复他们的存储。与此同时,您可以通过确保引用站点和重定向站点位于同一区域,通过消除跨区域的重定向来解决问题。 –
它甚至不能在边缘的非私人窗口中工作。 –