我目前的某个应用程序存在问题。
问题是用户可以在输入任何数据之前长时间保持页面打开,因此有时,当他们输入数据并点击提交按钮时,他们会被重定向到o365进行身份验证,因此会丢失输入数据
我已经为该应用程序运行了所有标准身份验证。但是,我相信为了做到这一点,我需要在单击提交按钮时在javascript中获取刷新的令牌,并将此令牌发送到api方法以便提供访问权。
这可能吗?有人知道如何去做吗?
这是一个使用Owin O365安全性和Microsoft Azure AD的MVC ASP.NET应用程序。
我不确定哪些信息或代码片段与此相关,所以如果我能提供任何内容,请询问。
我找到了使用angular获取令牌等的多个示例,但是,这不是SPA,也不使用角度。
非常感谢提前。
更新
我尝试使用以下代码使用ADAL JS检索令牌,但它似乎无法识别AuthorizationContext(config)调用:
<script src="https://secure.aadcdn.microsoftonline-p.com/lib/1.0.0/js/adal.min.js"></script>
$('#btnSubmit').on('click', function (e) {
e.preventDefault();
CheckUserAuthorised();
});
function CheckUserAuthorised() {
window.config = {
instance: 'https://login.microsoftonline.com/',
tenant: '##################',
clientId: '###################',
postLogoutRedirectUri: window.location.origin,
cacheLocation: 'localStorage'
};
var authContext = new AuthorizationContext(config); //THIS LINE FAILS
var user = authContext.getCachedUser();
if (!user) {
alert("User Not Authorised");
authContext.login();
}
else {
alert('User Authorized');
}
}
这会在控制台中出现以下错误:
'AuthorizationContext' is undefined
更新
我没有通过未定义的错误。这是因为我打电话给AuthorizationContext
而不是AuthenticationContext
。小学生错误。但是现在,每当我检查上下文的用户属性时,它始终为null。我不知道如何在页面加载时初始化上下文。
答案 0 :(得分:0)
我在网络上发现了类似的example,您的问题似乎与您要实例化的对象有关。
而不是
new AuthorizationContext(window.config);
尝试
new AuthenticationContext(window.config);
代码运行得很好,表明用户未经过身份验证。
答案 1 :(得分:0)
您的代码中缺少一个步骤,这是一个简单的代码示例,希望它能为您提供帮助:
<script src="https://secure.aadcdn.microsoftonline-p.com/lib/1.0.10/js/adal.min.js"></script>
<body>
<a href="#" onclick="login();">login</a>
<a href="#" onclick="getToken()">access token</a>
<a href="#" onclick="getUser()">get user</a>
</body>
<script type="text/javascript">
var configOptions = {
tenant: "<tenant_id>", // Optional by default, it sends common
clientId: "<client_id>",
postLogoutRedirectUri: window.location.origin,
}
window.authContext = new AuthenticationContext(configOptions);
var isCallback = authContext.isCallback(window.location.hash);
authContext.handleWindowCallback();
function getToken(){
authContext.acquireToken("https://graph.microsoft.com",function(error, token){
console.log(error);
console.log(token);
})
}
function login(){
authContext.login();
}
function getUser(){
var user = authContext.getCachedUser();
console.log(user);
}
</script>
代码示例来自No 'Access-Control-Allow-Origin' header with Microsoft Online Auth的答案。问题不同,但它们处于相同的情况。
任何进一步的关注,请随时告诉我。