通过 ADAL JavaScript Ajax 和 KnockoutJs 的 MVC AD Azure 刷新令牌

2023-11-25

我构建的 MVC 应用程序类型存在固有的设计缺陷,我相信我不是第一个意识到这一点的人。

我有一个 MVC 4 应用程序,它利用 AD Azure 身份验证,通过以下方式引入到应用程序中

使用 Azure Active Directory 开发 ASP.NET 应用程序

一旦用户通过身份验证并且Home.cshtml加载时,KnockoutJs 用于执行 JavaScript AJAX POST 和 GET 请求来读取和写入数据。

因此,它不完全是一个单页应用程序,而是通过 AJAX 进行身份验证和服务资产以及读/写操作的传统回发的混合体。

在 AJAX 请求期间,身份验证令牌会过期,并且 AD 无法通过 JavaScript 刷新令牌。

观察到以下浏览器错误

XMLHttpRequest 无法加载https://login.windows.net/xxx。 请求的资源上不存在“Access-Control-Allow-Origin”标头。 因此,不允许访问源“xxx”。

我研究了 adal.js 和以下帖子,但不确定 adal.js 是否是我的应用程序类型的解决方案 或者如何最好地将其合并以使其适合我的应用程序类型。

到目前为止我的理解:

我没有使用 AngularJS。

我一开始并不是通过 JavaScript 进行身份验证,而且我的身份验证不是 JavaScript 驱动的,无法从 adal.js 中受益。

身份验证在服务器端完成,后续的 OAuth2 刷新令牌机制需要整页回发。

我偶然发现了 Vittorio Bertocci 的各种相关帖子,但没有一个帖子讨论了这种类型的 MVC 应用程序设计的特殊性。

ADAL、Windows Azure AD 和多资源刷新令牌

WAAD 不会从 javascript 刷新访问令牌

结合 ADAL.Net 和 ADAL.js

AngularJS + ADAL.JS 设置资源 ID(受众)


您的设置问题在于您使用 cookie 来验证 AJAX 调用。 Cookie 并不是非常适合这种情况,当您需要在域之外进行调用和/或 Cookie 过期时,通常会出现该方法的局限性。事实上,它是一种常见的方法,主要是由于一段时间以来无法提供对 auth 的适当 SPA 支持而导致的演进步骤,但这并不意味着它是一种好的方法。 您可以自由地坚持当前的方法,但这会带来一些痛苦。没有既定机制可以从 JS 触发会话 cookie 更新。虽然可以一起破解,但我们没有这方面的示例 - 主要是因为它是一个破解:)基本情况似乎很简单,但是一旦您开始考虑所有可能的情况(如果您的应用程序会话过期时会发生什么,用户退出 Azure AD 并使用其他帐户登录?)。 最万无一失的方法是放弃混合方法。如果你想成为一个 JS 应用程序,你可以消除所有服务器驱动的登录,并且仍然保留执行服务器端流程的能力(通过代表授权,例如https://github.com/AzureADSamples/WebAPI-OnBehalfOf-DotNet)。如果您不愿意,您甚至不需要转换为角度,请参阅https://github.com/AzureADSamples/SinglePageApp-jQuery-DotNet。 如果你想成为一个基于回发的应用程序,你可以删除 JS 部分(尽管这听起来很痛苦)。

TL;DR:通过 cookie 保护 AJAX 调用并不是一个干净的解决方案,您一定会感到一些痛苦。您的选择是使用临时黑客修补问题,或者重构为更规范的方法。关于这些坏消息我很遗憾 :(

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 ADAL JavaScript Ajax 和 KnockoutJs 的 MVC AD Azure 刷新令牌 的相关文章

随机推荐

  • 如何在 tidyr 和 ggplot2 的函数中使用 dplyr 的 enquo 和 quo_name

    library dplyr Devel version soon to be released 0 6 0 library tidyr library ggplot2 library forcats for gss cat data 我正在
  • 如何使 HTML/CSS 幻灯片背景淡入淡出?

    我想知道如何使背景幻灯片像常规幻灯片一样淡入其他照片中 我已经尝试了很多代码 但尚未成功 现在 我有一个代码可以将背景更改为不同的照片 效果很好 但不会褪色 无论如何要添加这个吗 这是代码
  • 转换整数数组以在 SQL“IN”子句中使用

    当然有一个框架方法 给定一个整数 字符串等数组 将它们转换成一个可以在 SQL 中使用的列表 IN 条款 e g int values 1 2 3 会去 1 2 3 var inClause String Join values Selec
  • Xcode 编译错误:Lipo:无法打开输入文件

    致命错误 Applications Xcode app Contents Developer Toolchains XcodeDefault xctoolchain usr bin lipo 无法打开输入文件 Users zicjin Li
  • sizeof 是否可以在 lambda 内部应用于未捕获的变量,或者这是一个编译器错误?

    这是讨论的后续内容在这里找到 以下代码在 gcc 和 clang 下编译 现场演示 这对于排队的情况来说是令人惊讶的 1因为 lambda 不捕获任何内容 对于以下情况MCR2 其中 lambda 返回指针本身 我们得到预期的编译时错误 行
  • ArrayList> - 如何最好地整理?

    中间有一个简单的问题 我有一个简单的 WeakRunnableList 是这样就可以清理它了 删除死引用 或者是否有更优雅和更快的解决方案 我的 WeakRunnableList 的完整源代码 public class WeakRunnab
  • Python Dataframe 根据一列中的最大值选择行

    我有一个 python 数据框 很多行 2 列 我想根据第 2 列中的最大值修改第 1 列中的唯一值 如果有帮助 第 2 列按升序排序 我可能可以编写一个循环 但更喜欢一两行解决方案 谢谢 Ex ID Value 100 11 100 14
  • 我可以使用反射来查找 ASP.NET 中的 bin/[Configuration] 文件夹而不是 asp 临时文件夹吗

    我有一个 ASP NET 网站 我想找到 bin Configuration 文件夹以使用外部工具 一个 exe 文件 当我使用反射来获取调用程序集位置时 它返回类似于以下内容的内容 C Windows Microsoft NET Fram
  • 想要在 Laravel 中实现 Web 套接字

    我想使用 Web 套接字在 Laravel 中实现 Web 通知 我有 尝试过推杆 这很简单 但它是付费套餐 我还尝试过redis和socket io 我必须安装horizo n 我正在运行 Windows 但根据我所读到的关于 Horiz
  • 部署到多个服务器

    我必须将我的 php html css etc 代码部署到多个服务器 并且我正在寻找可以轻松安全地部署到多个服务器的软件选项 如果它可以绑定到我的 SVN 中 也会有帮助 有什么建议么 卡皮斯特拉诺对此非常方便 有几个人在用 1 2 3 用
  • div背景颜色,改变悬停时的背景颜色

    我正在尝试做一个鼠标悬停时 div 的背景颜色发生变化 div 背景 白色 div a hover 背景 灰色 宽度 100 显示 块 文本装饰 无 only the link在 div 内获取背景颜色 我能做些什么来使整个div得到那个背
  • 如何在Android中调用Oauth 1.0 API?

    我正在尝试从 Android 调用基于 Oauth 1 0 身份验证的 Context io API 您能否建议我如何创建 Oauth 1 0 标准的请求 或者请任何人都可以向我提供该标准上的 Oauth 1 0 请求示例的示例代码 非常感
  • Pickle AttributeError:无法从“app.py”> 获取<模块“__main__”上的属性“Wishart”

    我已经运行代码来加载由 pickle 保存的变量 这是我的代码 import pickle last priors file open simpanan priors rb priors pickle load last priors fi
  • $(document).on("点击"...不起作用?

    我在这里可能会犯一个众所周知的错误吗 我有一个使用 on 的脚本 因为元素是动态生成的 并且它不起作用 为了测试一下 我用动态元素的换行替换了选择器 它是静态的 但它仍然不起作用 不过 当我切换到普通的旧 click 进行包装时 它起作用了
  • 如何在 Java 中检查日期的完整性

    我觉得奇怪的是 最明显的创建方式DateJava 中的对象已被弃用 并且似乎已被使用不太明显的宽松日历 替代 如何检查以日 月 年组合形式给出的日期是否有效 例如 2008 02 31 如 yyyy mm dd 将是无效日期 Key is
  • 获取 JFrame 内容的实际大小

    我得到一个 JFrame 我想显示一个带有边框的 JLabel 其填充量可能为 50px 当我将 JFrame 的大小设置为 750 750 将 JLabel 的大小设置为 650 650 将位置设置为 50 50 时 它显示得很奇怪 这是
  • 如何强制 WPF 启动窗口到特定屏幕?

    我有一个 WPF 应用程序 它将通过专用窗口显示投影仪上的信息 我想配置用于投影仪显示的屏幕以及用于主应用程序窗口的屏幕 此代码将在指定屏幕上生成投影仪输出 var screen GetProjectorScreen projectorWi
  • Apache Commons IO 文件监控与 JDK WatchService

    我需要开发一个应用程序 一旦在预定义目录中创建文件 该应用程序就会处理 csv 文件 预计会有大量传入文件 我在生产中看到过使用 Apache Commons IO 文件监控的应用程序 它运作得很好 我见过它一天处理多达 2100 万个文件
  • 在 contenteditable div 中按 Enter 键插入换行符

    当我在 contenteditable div 中按 Enter 键时 我尝试插入换行符 而不是浏览器想要插入的任何内容 我当前的代码看起来像这样 if e which 13 e stopPropagation e preventDefau
  • 通过 ADAL JavaScript Ajax 和 KnockoutJs 的 MVC AD Azure 刷新令牌

    我构建的 MVC 应用程序类型存在固有的设计缺陷 我相信我不是第一个意识到这一点的人 我有一个 MVC 4 应用程序 它利用 AD Azure 身份验证 通过以下方式引入到应用程序中 使用 Azure Active Directory 开发