从 Azure ACS 下载登录页面后,如何使返回 URL 再次正常工作?

2023-12-20

Azure 培训工具包包括一个名为“IntroToACS2”的实验室。在其中创建一个 WebRole 并启用 ACS,以便您可以使用 Google、Live 或 Yahoo ID 登录。本实验的第二部分将引导您完成从 ACS 下载示例登录页面的过程,以便您可以对其进行自定义以匹配您网站的风格。

在完成最后一部分之前,深度链接工作正常。含义:我可以请求一个安全页面,例如http://localhost/acsdemo/securepage.aspx http://localhost/acsdemo/securepage.aspxACS 会拦截该请求,将我重定向到登录页面,然后返回到http://localhost/acsdemo/securepage.aspx http://localhost/acsdemo/securepage.aspx,但现在它只是让我返回默认页面http://localhost/acsdemo/default.aspx http://localhost/acsdemo/default.aspx.

从 Azure ACS 下载登录页面后,需要做什么才能使深层链接再次工作?


当您重定向登录时,securepage.aspx 的返回 URL 通常存储在上下文参数中。在 ACS 托管登录页面和自定义可下载页面中,都有 JavaScript 查询 ACS 的身份提供商列表,然后为每个 IP 生成登录链接。 ACS 托管版本的特殊之处在于,它还将收集提供给它的 wctx 并自定义每个 IP 登录 url 以保留此上下文。这样 ACS 就知道在身份验证完成后将用户重定向回哪里。

然而,自定义可下载登录页面不会保留此上下文,这就是您出现此行为的原因,ACS 只是将您重定向到您在 ACS 配置中指定的返回 URL,在本例中为 default.aspx。

但您可以更改自定义登录页面以插入此缺失的参数。这里的复杂之处在于,根据协议的不同,此上下文的通信方式也不同。对于 LiveID (WS-联邦) 传入的 wctx 可以在 liveID 登录链接中的传出 wctx 中重新传输,但以盒装形式“cx”。下面是我添加到 CreateIdentityProviderButton() 函数中的一些 javascript,以实现此目的。

    ...

    //Creates a stylized link to an identity provider's login page
    function CreateIdentityProviderButton(identityProvider) {

        // Some code I stole from fellow stackoverflow  member for extracting query parameters =)
        var urlParams = {};
        (function () {
                var e,
                    a = /\+/g,  // Regex for replacing addition symbol with a space
                    r = /([^&=]+)=?([^&]*)/g,
                    d = function (s) { return decodeURIComponent(s.replace(a, " ")); },
                    q = window.location.search.substring(1);

                while (e = r.exec(q))
                    urlParams[d(e[1])] = d(e[2]);
            })();

        var cx = "&cx=" + encodeURIComponent(urlParams.wctx);
        var idpList = document.getElementById("IdentityProvidersList");
        var button = document.createElement("button");
        button.setAttribute("name", identityProvider.Name);
        button.setAttribute("id", identityProvider.LoginUrl + encodeURIComponent(cx));

        ...

对于雅虎或谷歌(OpenID)此上下文返回于openid.return_to,作为“上下文”查询参数。因此,在您的登录页面中,您可以类似地编辑登录链接中的 openid.return_to ,如下所示:

... openid.return_to=https://youracstenant.accesscontrol.windows.net:443/v2/openid?context=<value of the wctx extracted from javascript above> ...

您可以根据您在 ACS IdentityProvider.js json 响应中看到的身份提供商名称,编写代码以特殊情况处理您的登录链接。

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

从 Azure ACS 下载登录页面后,如何使返回 URL 再次正常工作? 的相关文章

  • 您是否将 super() 调用放在构造函数的开头?

    这是一个关于编码风格和推荐实践的问题 正如问题答案中所解释的不需要将 super 放在构造函数中吗 https stackoverflow com questions 2054022 unnecessary to put super in
  • 动画技能栏

    所以 我有这个 技能条形图 我需要动画 不仅是尽快 而且当观众向下滚动到它时 他们就会看到动画发生 这就是我所拥有的 bargraph height 229px position relative border left 1px solid
  • AWS Lambda在EC2实例上运行命令并获取结果

    我有一个正在运行几个进程的 EC2 实例 我还有一个通过各种方式触发的 Lambda 脚本 我希望这个 Lambda 脚本与我的 EC2 实例对话并从中获取正在运行的进程列表 本质上是运行ps aux在 EC2 盒子上 并读取输出 现在 只
  • Internet Explorer 9 中 URL 查询字符串值的 UTF-8 字符编码问题

    当尝试显示 URL 查询字符串中提供的特殊字符 德语重音字符 时 我在 Internet Explorer 特别是 IE9 中发现了一个奇怪的问题 这在 Firefox 和 Chrome 中按预期工作 例如 我正在使用的 URL 看起来像这
  • 运行 spring boot jar 时无法找到或加载主类

    我在运行通过 mvn package 创建的 jar 时遇到问题 我尝试了各种解决方案但没有成功 pom xml
  • Spark 如何与 CPython 互操作

    我有一个用 Akka 编写的系统scala需要呼吁一些人Python代码 依赖于Pandas and Numpy 所以我不能只使用 Jython 我注意到 Spark 在其工作节点上使用 CPython 所以我很好奇它如何执行 Python
  • /lib64/libc.so.6:找不到版本“GLIBC_2.32”

    我正在使用基本示例在 Ubuntu 上构建 lambda 它构建时没有任何错误 但如果我在 aws 上上传并测试它 则会崩溃 errorMessage RequestId 7f4d0aca 125c 4032 98dd 9ff387e525
  • 如何在tomcat服务器上部署reactJS应用程序?

    我正在尝试构建一个 ReactJS 应用程序 我想将其托管在 tomcat 服务器上 我已经使用了命令 npm run build 并且构建已准备就绪 我应该在 Tomcat 服务器中的哪里复制这些文件 我是否需要创建另一个应用程序并将其部

随机推荐

  • Hibernate Inverse 属性

    我正在创建一对多关系 所以 我有父母和孩子 级联属性设置为全部 我想知道 我们是否考虑以下代码 Parent p Parent session load Parent class pid Child c new Child child el
  • Material-ui:如何停止嵌套组件中单击事件的传播

    我有一个IconMenu里面的组件Paper成分 我想阻止内部组件 IconMenu 这就是我想出来的 没有显着的结果 我也尝试用 onClick 代替onTouchTap onMouseUp具有相同的效果 iconMenuClick方法从
  • Java:递增/递减运算符的前缀/后缀

    从下面的程序或here http download oracle com javase tutorial java nutsandbolts examples PrePostDemo java 为什么最后一个调用System out pri
  • 如何移动 JPanel

    我有一个JDialog其中包含JPanel和其他元素 例如JTextField 我想搬家JDialog加载到屏幕上后从一个位置到另一个位置 当我尝试使用时jdialog setLocation 我无法动弹JDialog并且添加到其中的所有其
  • 多个使用者和查询 C# BlockingCollection

    我使用 NET 4 0 BlockingCollection 来处理一个项目队列 每个项目都需要通过一个操作来处 理 该操作最多需要一秒钟来处理每个项目 该项目队列可以由不同的线程添加到该队列中 我对此有几个问题 a 允许多个消费者处理此
  • 如何确定某个日期是否位于当前星期的日期之间?

    In C 我们如何检查特定日期与周内日期 例如 2014 年 6 月 2 日 当前几周 2014年2月2日 2014年2月8日 所以这个日期是在上周 使用它进行检查 如果您希望从 fromDate 开始始终是 1 周 则最后一个参数是可选的
  • 消除 BigQuery 表中的重复记录

    我计划每天将增量数据附加到 BigQuery 表中 每次我向现有表添加增量数据时 我都想从表中的现有数据中消除重复记录 基于主键列 一种方法是 从增量数据中收集密钥集 我们称其为INCR KEYS 对以下行运行查询 SELECT all c
  • 将 mkv 转换为 h264 FFmpeg

    EDIT 这个问题已经变得非常流行 并且是搜索 convert mkv to h264 ffmpeg 的最佳结果之一 因此我认为对于任何偶然发现这个问题的人来说 添加这一点是适当的 而不是使用 ffmpeg i input mkv c v
  • C# Outlook 2007 - 如何直接从我的插件访问附件内容?

    我正在尝试解析基于文本的文件附件 txt doc 等 但是 我似乎无法获取二进制信息本身 我可以获取文件名 也可以将文件保存到某个临时文件夹并从那里打开它 但这看起来很混乱 有没有什么方法可以访问附件的内容而不保存它 阅读它 然后删除它 或
  • 使用 Visual Studio 管理源代码管理中的引用

    我在 Visual Studio 项目中管理 dll 引用时遇到问题 所有注册的 NET 和 COM 引用都工作正常 但当涉及磁盘上的 dll 文件时 如果我引用磁盘上的文件 我的同事将丢失引用 因为他们可能将其放在磁盘上的不同位置等 Vi
  • 如何使用layoutIfNeeded?

    何时以及如何layoutIfNeeded用过的 我知道当我们改变视图的布局时 我们可以调用setNeedsLayout更新布局但不确定何时layoutIfNeeded应该使用 注意 我有layoutIfNeeded在实际代码中使用但忘记了它
  • 无法在iOS中将统一的CNContact添加到CNGroup中

    这就是我正在做的 void doCreateGroup self contentView endEditing true NSString newString self contentView groupNameField text str
  • 检索 SQLite 中所有项目的最快方法是什么?

    我在 Windows 上编程 我将信息存储在 sqlite 中 然而我发现获取所有物品有点慢 我正在使用以下方式 select from XXX 检索 1 7MB SQLite DB 中的所有项目大约需要 200 400 毫秒 太慢了 有人
  • 在 NodeJS 中可靠地读取 FIFO

    我正在编写一个与第三方应用程序交互的 NodeJS 脚本 第三方应用程序将在文件打开期间将数据写入文件 我希望我的 NodeJS 应用程序能够实时接收这些数据 我的脚本创建一个 fifo child process spawnSync mk
  • 在 C++ 中从 WMI(Win32_LogicalDisk 类)调用 Chkdsk ->“参数无效”

    我正在尝试从 C 中的 WMI 运行 Chkdsk 我正在使用 Qt Framework ExecMethod 返回 参数无效 我已经根据设置参数http msdn microsoft com en us library cc250766
  • 如何获取隐藏父元素的大小?

    1 4 4 返回隐藏元素的大小 但是另一个隐藏元素中的元素呢 除了 getWidth 还有更好的解决方案吗
  • SqlAlchemy:如何实现 DROP TABLE ... CASCADE?

    我需要删除 PostgreSQL 数据库中具有外键约束并且需要的表DROP TABLE CASCADE 我可以执行原始 SQL engine execute DROP TABLE s CASCADE table name 但是 我想实现这种
  • 尝试在 r 中运行 glmer 时出现警告消息

    目前 我正在尝试在最新版本的 R 和 lme4 上重新运行旧的数据分析 二项式 glmer 模型 从 2013 年初开始 因为我不再有旧版本的 R 和 lme4 但是 我遇到了与 dmartin 和 carine 之前的线程 第一条警告消息
  • Bundle.main.path(forResource... 查找 xml 文件时总是返回 nil

    我正在尝试从我的包中读取文件 我知道以前有人问过这个问题 但我已经阅读了其他解决方案 但其中似乎不符合我的情况 我有一个 XML 文件 我可以在项目导航器中看到它 我还可以通过转到项目 构建阶段 复制捆绑资源来检查它是否包含在捆绑包中 我尝
  • 从 Azure ACS 下载登录页面后,如何使返回 URL 再次正常工作?

    Azure 培训工具包包括一个名为 IntroToACS2 的实验室 在其中创建一个 WebRole 并启用 ACS 以便您可以使用 Google Live 或 Yahoo ID 登录 本实验的第二部分将引导您完成从 ACS 下载示例登录页