gpt4 book ai didi

asp.net-mvc-4 - MVC AD Azure 刷新 token 通过 ADAL JavaScript Ajax 和 KnockoutJs

转载 作者:行者123 更新时间:2023-12-04 14:26:09 24 4
gpt4 key购买 nike

我构建的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com