asp.net-mvc-4 – 通过ADAL JavaScript Ajax和KnockoutJs的MVC AD Azu
|
在我构建的MVC应用程序类型中存在固有的设计缺陷,我相信我不是第一个意识到的. 我有一个MVC 4应用程序,它使用以下列方式引入应用程序的AD Azure身份验证 Developing ASP.NET Apps with Azure Active Directory 一旦用户被认证并且Home.cshtml加载,KnockoutJs用于执行JavaScript AJAX POST和GET请求以读取和写入数据. 所以不完全是单页应用程序,而是通过AJAX混合使用身份验证和服务资产以及读/写操作的传统回发. 在AJAX请求期间,身份验证令牌过期,AD无法通过JavaScript刷新令牌. 观察到以下浏览器错误 XMLHttpRequest无法加载https://login.windows.net/xxx. 我已经研究过adal.js和以下帖子,但不确定adal.js是否是我的应用程序类型的解决方案 到目前为止我的理解: 我没有使用AngularJS. 我没有开始通过JavaScript进行身份验证,而我的身份验证不是JavaScript驱动的,无法从adal.js中受益. 身份验证在服务器端完成,后续OAuth2刷新令牌机制需要完整页面回发. 我偶然发现了维托里奥·贝尔托奇(Vittorio Bertocci)的各种相关帖子,但都没有提到这种类型的MVC应用程序设计的特殊性. ADAL,Windows Azure AD and Multi-Resource Refresh Tokens WAAD doesn’t refresh access token from javascript Combining ADAL.Net and ADAL.js AngularJS + ADAL.JS set Resource ID (Audience) 解决方法您的设置问题是您使用cookie来验证AJAX调用. Cookie实际上并不适合这种情况,当您需要在域外进行调用和/或Cookie过期时,通常会出现限制.事实上,这是一种常见的方法,主要是由于对auth的适当SPA支持在一段时间内不可用的事实而进化的步骤,并不能使其成为一种好的方法.您可以自由地坚持当前的方法,但这会导致一些痛苦.没有建立从JS触发会话cookie更新的机制.虽然这可以被黑客攻击,但我们没有这样的样本 – 主要是因为它是一个黑客:)基本情况似乎很容易,但是一旦你开始考虑所有可能的情况(如果你的应用程序会话到期时会发生什么,用户是否已从Azure AD注销并使用其他帐户登录?). 最简单的方法是放弃混合方法.如果你想成为一个JS应用程序,你可以消除所有服务器驱动的登录,并且仍然保留服务器端流程的能力(通过onbehalf of grants,如 https://github.com/AzureADSamples/WebAPI-OnBehalfOf-DotNet).如果你不想,你甚至不需要转换成角度,见 https://github.com/AzureADSamples/SinglePageApp-jQuery-DotNet. 如果你想成为一个基于回发的应用程序,你可以删除JS部分(虽然这听起来很痛苦). TL; DR:通过cookie保护AJAX呼叫不是一个干净的解决方案,你一定会感到有些痛苦.您的选择是在将问题与临时黑客修补,或者重构为更规范的方法之间.关于这些坏消息我很遗憾 :( (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 如何停止RadioButtonList标签文本从按钮下包装
- asp.net核心 – Asp.Net核心从url获取RouteData值
- asp.net-mvc-3 – 强制重新验证mvc3不显眼的远程验证
- 将密码哈希从ASP.NET Identity 2.0迁移到3.0
- 如何在asp.net和C#中实现登录会话
- asp.net – UpdatePanel中的DropDownList
- asp.net gridview中的datetime格式
- asp.net-mvc – 如何使用Html.EditorFor与MVC3设置id
- ASP.net MVC5中的asp.net-mvc – CORS
- 如何在ASP.NET MVC中创建CheckBoxListFor扩展方法?
- asp.net-mvc-3 – 关于Razor中嵌套代码块声明的问
- asp.net-mvc-3 – ASP.NET MVC3从https重定向到h
- 使用ASP.Net MVC与经典ADO.Net
- asp.net-core – asp.net核心身份中的多个SubDom
- asp.net neatUpload 支持大文件上传组件
- asp.net-mvc – 如何将模型中的占位符文本添加到
- AJAX分页的代码(后台asp.net)
- asp.net-mvc – ASP.NET MVC3,Html.TextAreaFor没
- ASP.NET用户控件列表/集合/数组属性
- ASP.NET MVC 2 – 如何使用IgnoreRoute忽略整个目
