- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我构建的 MVC 应用程序类型存在固有的设计缺陷,我相信我不是第一个意识到的。
我有一个使用 AD Azure 身份验证的 MVC 4 应用程序,该应用程序通过以下方式引入应用程序
Developing ASP.NET Apps with Azure Active Directory
一旦作为用户被验证和 Home.cshtml
加载,KnockoutJs 用于执行 JavaScript AJAX POST 和 GET 请求以读取和写入数据。
所以不完全是单页应用程序,而是通过 AJAX 进行身份验证和服务 Assets 以及读/写操作的传统回发的混合。
在 AJAX 请求期间,身份验证 token 会过期,并且 AD 无法通过 JavaScript 刷新 token 。
观察到以下浏览器错误
XMLHttpRequest 无法加载 https://login.windows.net/xxx .
请求的资源上不存在“Access-Control-Allow-Origin” header 。
因此,不允许访问源“xxx”。
我已经研究了 adal.js 和以下帖子,但不确定 adal.js 是否适合我的应用程序类型
或者如何最好地合并它以使其适用于我的应用程序类型。
到目前为止我的理解:
我没有使用 AngularJS。
我一开始不是通过 JavaScript 进行身份验证,而且我的身份验证不是 JavaScript 驱动的,以便能够从 adal.js 中受益。
身份验证在服务器端完成,随后的 OAuth2 刷新 token 机制需要整页回发。
我偶然发现了 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 过期时,该方法的局限性通常会出现。事实上,它是一种常见的方法,主要是作为一个进化步骤,因为有一段时间没有对身份验证的适当 SPA 支持,这并不使它成为一个好方法。
你可以自由地坚持你目前的方法,但这会引起一些痛苦。没有用于从 JS 触发 session cookie 更新的既定机制。虽然可以一起破解,但我们没有样本 - 主要是因为它是一个 hack :) 基本情况似乎很容易,但是一旦您开始考虑所有可能的情况(如果您的应用 session 过期会发生什么,用户从 Azure AD 注销并使用其他帐户登录?)。
最简单的方法是放弃混合方法。如果你想成为一个 JS 应用程序,你可以消除所有服务器驱动的登录,但仍然保留执行服务器端流程的能力(通过代表授权,如 https://github.com/AzureADSamples/WebAPI-OnBehalfOf-DotNet)。如果您不想,您甚至不需要转换为角度,请参阅 https://github.com/AzureADSamples/SinglePageApp-jQuery-DotNet .
如果你想成为一个基于回发的应用程序,你可以删除 JS 部分(尽管这听起来很痛苦)。
TL;DR:通过 cookie 保护 AJAX 调用并不是一个干净的解决方案,你肯定会感到一些痛苦。您的选择是在使用临时黑客修补问题或重构为更规范的方法之间。关于这些坏消息我很遗憾 :(
关于asp.net-mvc-4 - MVC AD Azure 刷新 token 通过 ADAL JavaScript Ajax 和 KnockoutJs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32428929/
如何配置 ADAL JS 以使用本地 Active Directory(Windows Server 2012 R2、ADFS)? GitHub 上的公告帖子 ( http://www.cloudid
我正在使用 Javascript(不带 Angular)向我的单页 Web 应用程序添加 AAD 身份验证。初始登录工作正常,但一个小时后, token 过期,我无法使用acquireToken 更新
我正在使用 Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory 用于对 Outlook.com API 进行身份验证的 Nuget
我正在使用在 azure ad 中进行身份验证的应用程序。我使用 adal.js 来获取访问 token 。但是访问 token 的有效期只有 1 小时。那么如何使用我在 Adal js 中的刷新 t
我有一个使用 Web 表单编写的旧应用程序。在这个项目中,我们开始将一些 Webform 转换为 SPA、Angular.js 和 WebAPI。 SPA 页面直接与 WebAPI 通信。我们的想法是
我已经使用 SPA 应用程序设置了 adal 和 adal-Angular v.1.0.10 库,并取得了巨大的成功。我正在使用 webpack,但在我的 html 页面中引用这些,希望避免全局范围问
我已经使用 SPA 应用程序设置了 adal 和 adal-Angular v.1.0.10 库,并取得了巨大的成功。我正在使用 webpack,但在我的 html 页面中引用这些,希望避免全局范围问
我正在我们的应用程序中实现 AAD 单点登录,我们将在我们的 MEAN 堆栈应用程序中使用 adal.js/adal-angular.js 库。初始化库的一部分是调用 init() 并提供租户和 cl
我在 Azure AD 中注册了一个控制台应用程序,该应用程序连接到 CRM Online(使用 these steps 配置)。它查询 Web API。 应用程序需要在没有用户交互的情况下运行...
我正在创建一个使用 Azure Active Directory 身份验证库作为身份验证提供程序的网站。我按照本教程在我的开发环境中建立了工作环境。 https://github.com/AzureA
我使用 ADAL for android 编写了下面的身份验证代码: mAuthContext = new AuthenticationContext(MainActivity.this, Const
我在 iOS 应用程序中使用 ADAL v2.5.4 自动登录时遇到问题。 当用户想要登录 MSA 帐户时,我们会使用所需的参数调用 acquireTokenWithResource,并将提示行为设置
var outlookServicesClient = await AuthenticationHelper.EnsureOutlookServicesClientCreatedAsync("Cale
我已经为 ADAL 身份验证设置了一个演示应用程序。我公司要求安装InTune应用程序:https://itunes.apple.com/us/app/intune-company-portal/id
我正在尝试开发一个VueJS单页应用程序,该应用程序会将您登录到AAD,以便我可以获取访问 token 以调用各种API(例如Graph)。 用户登录后,您必须获取 token ,并且有两种方法可
我正在使用以下代码对我的 Azure 试用帐户中的默认用户进行身份验证。 static void Main(string[] args) { GetTokenAsync
我刚开始使用 adal-node npm 包。 在示例中提到: var resource = '00000002-0000-0000-c000-000000000000'; 这个 ID 是从哪里来的?
AzureAD 支持 OAuth 资源所有者密码凭据授予。 ADAL SDK 最近添加了对其的支持 ( https://www.nuget.org/packages/Microsoft.Identit
我正在尝试从我的 Auth0 设置中获取访问 token ,我正在使用 ADAL。当我查看 fiddler 时,我不明白为什么它试图连接到以下站点: https://login.windows.net
我正在尝试将 adal.js 集成到我的应用程序中。下面是我的代码。有人可以告诉我为什么未触发身份验证吗? var app = angular.module('TestWebApp', [ 'n
我是一名优秀的程序员,十分优秀!