我不确定如何简洁地解释这一点,第一部分,隐式流程。我不完全了解隐式流是什么。我没有把它简化成一个句子。我不知道这是一种设计模式还是一种处理令牌的方式。
使用基本的JavaScript单页应用程序并实现Msal版本1.2.1。每次msalClient获取作用域的令牌时,它都会离开iFrame来处理令牌刷新。
window.msalConfig = {
auth: {
clientId: '<clientId>'
, authority: "https://login.microsoftonline.com/common"
, validateAuthority: true
}
, cache: {
cacheLocation: "localStorage"
}
, graphScope: {
scopes: ["https://graph.microsoft.com/User.Read", "https://graph.microsoft.com/Mail.Send" ]
}
, appScope: {
scopes: ["<clientId>"]
}
, appToken:{
token: null
}
, graphToken:{
token: null
}
};
clientApplication = new Msal.UserAgentApplication(window.msalConfig);
function onSignin(idToken) {
clientApplication.acquireTokenSilent(window.msalConfig.appScope)
.then(function (token) {
window.msalConfig.appToken.token = token;
}, function (error) {
clientApplication.acquireTokenPopup(window.msalConfig.appScope).then(function (token) {
window.msalConfig.appToken.token = token;
}, function (error) {
console.log(error);
});
});
getGraphToken();
};
function getGraphToken() {
clientApplication.acquireTokenSilent(window.msalConfig.graphScope)
.then(function (token) {
window.msalConfig.graphToken.token = token;
}), function (error) {
console.log(error);
};
};
这些iFrame只是坐在这里并定期刷新,大概是获得了新令牌,或者使其在另一端保持活动状态。 (在chrome调试器中,每次刷新使我进入Sources选项卡时,这几乎使调试变得不可能。)
而且,想知道为什么在使用图范围而不是应用范围时会引发跨站点cookie错误。
很好奇为什么关闭了,似乎仍然存在。
https://github.com/AzureAD/microsoft-authentication-library-for-js/issues/697
隐式流程是OAuth中获取令牌的流程之一,特别适合单页应用程序,因为它不需要服务器组件。如您所见,它使用iframe获取令牌。您可以在此处阅读有关隐式流的更多信息:https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-implicit-grant-flow
SameSite cookie警告是预期的,因为有意在login.microsoftonline.com上保留了一些cookie,而没有SameSite属性。身份验证所需的所有login.microsoftonline.com cookie已更新。您可以在此处了解更多信息:https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-handle-samesite-cookie-changes-chrome-browser?tabs=dotnet
对于问题697,v1.2.0中已解决了在隐藏的iframe中重新加载应用程序的主要问题,该问题现在允许您指定不包含MSAL或任何其他内容的页面(例如,空白html页面)作为重定向URI,可减轻在iframe / popup中重新加载应用程序的性能开销。您还可以为每个请求设置重定向URI,以防您需要与配置中设置的URL不同的URI。
并且如果您发现iframe难以调试,请知道我们正在使用该库的新版本,它将使用带有PKCE的身份验证代码流(而不是隐式流)来获取令牌,该令牌将使用CORS http请求获取令牌,而不是iframe。我们计划在本月提供该功能。