在 C# 中设置 Azure ACS

2023-12-13

我正在查看几个使用 ACS 的示例,它们确实让我感到愚蠢。

我查看了在线教程,似乎我所需要的只是配置中的以下行:

  httpRuntime requestValidationMode="2.0"

但本节中的其他一些例子示例项目SimpleMVC4 的配置中没有这样的行。更糟糕的是,我没有看到任何引用 ACS 库的内容,无论是什么。

另一方面,MVC3 示例有一堆乱码,包括对 javascript 的 ajax 请求,哈!?

    public const string HrdPath = "v2/metadata/IdentityProviders.js";

    /// <summary>
    /// Gets the url with its query string representing this request
    /// </summary>
    /// <returns></returns>
    public string GetUrlWithQueryString()
    {
        uriBuilder.Path = HrdPath;
        uriBuilder.Query = parameters.ToQueryString();

        return uriBuilder.Uri.AbsoluteUri;
    }

并在 Razor 视图中

    $("#signIn").click(function () {
        //
        // Explicit JSONP callback can be used to do client side caching of identity provider data.
        //
        $.ajax({
            url: "@Html.Raw(Model.GetUrlWithQueryString())",
            dataType: "jsonp",

HUH!?

看看我能得到一些简单的(白痴证明)指针吗?

  1. 我是依赖方
  2. 我有一个 MVC控制器动作,我想告诉用户这里是他们可以使用的身份提供商 (IP) 及其各自的 URL,以及生成将在下面的步骤 (3) 中验证的令牌。如何在 C# 代码中实现这一点?
  3. 一旦客户端、ACS、IP 完成了他们的业务,我不在乎那是什么,就我而言,所有这些都在客户端、ACS 和 IP 之间。我应该收到用户的另一个请求。我该如何处理这个请求?如何验证用户是否犹太洁食?并且他们没有伪造上述步骤 (2) 中的令牌。

我最近也经历过类似的痛苦。我对此完全是新手,很难理解这一切。我发现多米尼克·拜尔 (Dominick Baier) 的 Pluralsight 课程对于理解这些概念非常有用。

现在回答你的问题。

我有一个 MVC 控制器操作,我想告诉用户这里是 他们可以使用的身份提供商 (IP) 及其各自的 URL 以及生成将在步骤(3)中验证的令牌, 以下。如何在 C# 代码中实现这一点?

请查看这篇博客文章,了解如何在您端创建登录页面:https://www.simple-talk.com/cloud/development/creating-a-custom-login-page-for-federated-authentication-with-windows-azure-acs/

一旦客户、ACS、IP 完成了他们的业务,我不在乎 那是什么,就我而言,所有这些都是客户之间的, ACS 和 IP。我应该收到用户的另一个请求。我该怎么办 处理这个请求吗?如何验证用户是否犹太洁食?然后 他们没有伪造上述步骤 (2) 中的令牌。

我认为您不需要在这里做任何特别的事情。 ASP.Net 管道通过设置IsAuthenticated的财产Principal为真。这是我的代码当前的样子(主要取自上面的博客文章)。对我来说,整个应用程序都受到保护,默认情况下用户会登录主页。我检查用户是否经过身份验证。如果他们未经过身份验证,我会向他们显示 ACS 中配置的所有身份提供程序,并且用户可以使用其中任何一个身份提供程序登录。身份验证成功后,ACS 会将用户发送回同一页面,这次用户已通过身份验证。在我的代码中,如果用户经过身份验证,我会执行应用程序所需的一系列声明转换。

控制器

public ActionResult Index()
        {
            if (!ClaimsPrincipal.Current.Identity.IsAuthenticated)
            {
                var idpsUrl = "IdentityProvidersUrl Taken from ACS Login Page";
                var webClient = new WebClient()
                {
                    Encoding = Encoding.UTF8,
                };
                var jsonList = webClient.DownloadString(idpsUrl);
                var acsResult = JsonConvert.DeserializeObject<List<IdentityProvider>>(jsonList);
                return View(acsResult);
            }
            else
            {
                var principal = ClaimsPrincipal.Current;
                var claims = principal.Claims;
                //If any claims transformation needs to be done, that can be done here.
            }
        }

View

@{
    ViewBag.Title = "Index";
}


<h2>Index</h2>

    @foreach (var p in Model)
    {
        <p>
            <a href="@p.LoginUrl">@p.ToString()</a>
        </p>
    }

Model

public class IdentityProvider
{
    public List<string> EmailAddressSuffixes { get; set; }
    public string ImageUrl { get; set; }
    public string LoginUrl { get; set; }
    public string LogoutUrl { get; set; }
    public string Name { get; set; }

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

在 C# 中设置 Azure ACS 的相关文章

随机推荐

  • 如何防止同一用户在不同电脑上同时登录

    我们构建了一个内部网应用程序 用户必须登录才能执行某些任务 我们必须确保没有 应用程序用户 同时登录多次 所以我现在所做的就是将当前的 asp net 会话 ID 存储在数据库中 然后在每个页面加载时比较它们是否相同 当用户登录时 会话 I
  • 当数组大小为一百万时程序崩溃[重复]

    这个问题在这里已经有答案了 可能的重复 大数组在 C 中给出分段错误 我正在尝试将合并排序和快速排序与不同的输入大小 如 10 000 100 000 和 1 000 000 进行比较 然而 当我给出一百万个输入大小时 程序崩溃了 我不知道
  • 获取屏幕当前滤色片的颜色

    以下代码将屏幕的滤色器设置为特定颜色 我怎样才能获取屏幕的颜色 DllImport GDI32 dll private unsafe static extern bool SetDeviceGammaRamp IntPtr hdc void
  • Windows批处理脚本-在for循环内设置变量

    也许我没有清楚地表达我的问题 这是我所做的实际代码 echo off set p keywords Enter keywords to search dir b dat gt filelist txt for f delims f in f
  • 匹配两个seaborn图的图例颜色

    我有这三个子图 我需要在顶部匹配下方的两个子图的图例中设置大陆的颜色 即欧洲 蓝色 亚洲 红色 等等 有没有办法做到这一点 我正在使用 Python seaborn 和 Matplotlib 这是我的代码和结果图 fig plt figur
  • 在 Python 中覆盖现有 Excel 文件时图形丢失

    我正在使用 openpyxl 写入现有文件 一切正常 但是 将数据保存到文件后 图表就会消失 据我了解 Openpyxl 目前仅支持在工作表中创建图表 现有工作簿中的图表将丢失 Python 中是否有任何替代库可以实现此目的 我只想提供一些
  • 如何从 F# 中的构造函数调用方法

    我知道这个问题 但提问者似乎对另一个问题的答案感到满意 如何重载构造函数 我有一个类 它充当可变类的高级记忆器 这样我就可以将其视为从外部不可变的 type Wrapper args let tool new MutableTool too
  • 我可以让 Memcached 在 Windows (x64) 64 位环境上运行吗?

    有人知道吗IF WHEN or HOW我可以得到内存缓存在 Windows 64 位环境上运行 我正在设置一个新的托管解决方案 并且更愿意运行 64 位操作系统 并且由于它是带有 SQL Server DB 的 ASP Net MVC 解决
  • \a(警报和蜂鸣声)转义序列字符在 C 语言中不起作用

    我不知道为什么 a不管用 我的代码正在运行并显示在终端中 我的代码 include
  • VS 2017安装失败

    我在 Windows 7 上安装 VS2017 一段时间后我收到错误 MSI C ProgramData Microsoft VisualStudio Packages Microsoft VisualStudio MinShell Msi
  • 就效率而言,全局 CSS 变量与局部变量

    CSS 中的全局变量在内存或效率方面是否比局部 CSS 变量低 所以基本上我的问题是 与在特定选择器的代码块中声明并相对于选择器本地作用域的变量相比 在全局范围内声明并且可以在CSS中的任何位置访问的变量是否有任何好处 当谈论全球范围时 我
  • Mongodb条件查询

    作为 mongo 的新手 陷入了条件查询 我想根据 3 个条件 名字 姓氏和电子邮件 ID 执行搜索 当所有字段都存在时 下面的查询工作完美 db students find and first name Abc i last name X
  • CSS 样式未在 IE8 中加载

    我有一个非常奇怪的问题 IE8 中没有加载 CSS 样式 也许 IE7 也是如此 但无法检查 我的网站位于http www leavetrackapp com 我的主 CSS 文件如下 import url reset css import
  • ASP.NET 5 自定义错误页面未在 Azure 网站上呈现

    我有一个 ASP NET 5 网站 我想向其中添加自定义错误页面 我习惯在 web config 中添加条目 从 ASP NET 4 天开始 但我想在 ASP NET 5 中使用新方法 因此 我的 Startup cs 类中有以下内容 if
  • 如何在每页的基础上更改导航栏的背景图像?

    我一直在寻找一种方法来改变我的背景图像NavigationBar并控制我的外观NavigationBar当用户导航应用程序时 据我了解 更改背景图像的公认方法是 implementation UINavigationBar UINaviga
  • 包含 U+001A 的 XML 文档的编码

    我有一个 XML 文档 它是根据人们从各种地方复制 粘贴的一些内容生成的 尽管大多数是 Word 文档 它看起来像这样
  • .NET 6 CORS 策略在客户端 CORS 上被阻止

    我的应用程序的客户端是 NET6 服务器端Web API是 NET 4 8 当尝试访问服务器端时 浏览器控制台中会产生以下错误 从源 https localhost 34564 获取 https localhost 12345 api co
  • 为什么单元测试中的代码无法找到捆绑资源?

    我正在单元测试的一些代码需要加载资源文件 它包含以下行 NSString path NSBundle mainBundle pathForResource foo ofType txt 在应用程序中它运行得很好 但是当由单元测试框架运行时p
  • Cross-Origin-Embedder-Policy:如何仅允许某些域?

    在网站上 我必须在网站上嵌入需要以下标头的 iframe 因为它需要 SharedArrayBuffer 功能 Cross Origin Embedder Policy require corp Cross Origin Opener Po
  • 在 C# 中设置 Azure ACS

    我正在查看几个使用 ACS 的示例 它们确实让我感到愚蠢 我查看了在线教程 似乎我所需要的只是配置中的以下行 httpRuntime requestValidationMode 2 0 但本节中的其他一些例子示例项目SimpleMVC4 的