AllowAnonymous 不适用于 Azure 广告身份验证

2024-04-09

我有一个 Asp.net MVC 应用程序,在其中使用 Azure AD 身份验证来对用户进行身份验证。我想允许用户无需登录即可访问某些 api 控制器。我尝试将 [AllowAnonymous] 属性放在控制器顶部以跳过这些控制器进行身份验证,但它总是重定向到 Microsoft 登录页面以获取凭据。 Startup.cs 中的代码片段:

public void ConfigureAuth(IAppBuilder app)
    {
        string clientId = GetConfigValue("ida_ClientId");
        string aadInstance = GetConfigValue("ida_AADInstance");
        string tenant = GetConfigValue("ida_Tenant");
        string domain = GetConfigValue("ida_Domain");
        string authority = GetConfigValue("ida_Authority");
        string postLogoutRedirectUri = GetConfigValue("ida_RedirectUri");

        bool devEnvironment = Convert.ToBoolean(GetConfigValue("DevEnvironment"));

        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
        app.UseCookieAuthentication(new CookieAuthenticationOptions()
        {
            CookieHttpOnly = true,
            CookieSecure = devEnvironment ? CookieSecureOption.SameAsRequest : CookieSecureOption.Always,
        });

        app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
        {
            ClientId = clientId,
            Authority = authority,
            PostLogoutRedirectUri = postLogoutRedirectUri,
            RedirectUri = postLogoutRedirectUri,
            Notifications = new OpenIdConnectAuthenticationNotifications
            {
                AuthenticationFailed = context =>
                {
                    context.HandleResponse();
                    context.Response.Redirect("/Error?message=" + context.Exception.Message);
                    return Task.FromResult(0);
                }
            }
        });
    }

    private string GetConfigValue(string key)
    {
        if (RoleEnvironment.IsAvailable)
        {
            return RoleEnvironment.GetConfigurationSettingValue(key);
        }
        else
        {
            return ConfigurationManager.AppSettings[key];
        }
    }
}

如果我遗漏了什么,请告诉我。提前致谢


这是预期的行为。Easy Auth 作为本机 IIS 模块实现,该模块与您的应用程序在同一沙箱中运行。启用后,分派到 IIS 工作进程的每个 HTTP 请求都必须首先通过此模块,然后应用程序代码才有机会做出反应。

该请求将被分派到 Web 应用程序,除非它已通过身份验证并且允许匿名在这种情况下不起作用。如果您想允许匿名请求,您可以使用OWIN组件来实现身份验证,而不是使用Easy Auth。

以下是使用 OpenId 组件保护 MVC 的示例:

活动目录-dotnet-webapp-openidconnect https://github.com/Azure-Samples/active-directory-dotnet-webapp-openidconnect

关于 Easy Auth 的更多细节,可以参考 CGillum 的博客

Azure 应用服务身份验证/授权的体系结构 http://cgillum.tech/2016/02/01/architecture-of-azure-app-service-authentication-authorization/

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

AllowAnonymous 不适用于 Azure 广告身份验证 的相关文章

随机推荐

  • 如何在 Jenkins 脚本管道中设置多行参数化 cron 作业?

    所以这工作正常 properties https stackoverflow com questions 35370810 how do i use jenkins pipeline properties step parameters n
  • 使用其他 Const Struct 实例初始化 Const Struct

    我很好奇为什么以下代码片段无法编译 typedef struct Foo int a int b Foo static const Foo FooZero 0 0 typedef struct Bar Foo foo int c Bar s
  • SimpleMembership 的 IsUserInRole 错误

    我使用此代码在我的 ASP NET MVC 4 Internet 应用程序上进行角色授权 if Roles IsUserInRole RolunAdi a href Test a 它工作正常 但有时我会出错 它在这张图片上 我脑子里有两件事
  • 使用等待时 Monitor.Exit 上的 SynchronizationLockException

    我正在创建一段代码 从我们拥有的遗留系统中获取网页 为了避免过多的查询 我对获取到的URL进行了缓存 我在用Monitor Enter Monitor Exit并双重检查以避免请求发出两次 但在释放锁时Monitor Exit 我收到此异常
  • 通过高延迟网络连接同步许多(小)文件的方法

    我们通常使用 Subversion 将软件应用程序部署到客户端 客户端上的 svn 更新 单向 目前 我们的一位客户遇到了问题 因为延迟很高 大文件下载速度很好 因为他们位于中国 而我们的服务器位于加拿大 Subversion 在很长一段时
  • Thread.Sleep(300) 无法正常工作

    我希望它执行代码的第一部分 然后使图片框可见 暂停 3 秒 隐藏图片框并执行其余代码 first part of the code here pb elvisSherlock Visible true Thread Sleep 300 pb
  • 用于解析包含逗号分隔值的命令行输入的批处理文件

    我正在开发一个命令行实用程序 它将一组输入参数作为命令 然后根据预定义名称验证这些输入参数 该实用程序以这种方式调用 运行实用程序 cmd A B x y z C w 这里的参数是 A B 和 C 以 开头的参数 现在验证规则如下 参数的名
  • 使用rest-client 将文件下载到磁盘,而不先将其全部加载到内存中

    我正在使用 Rest client 下载大页面 大小约为 1 5 GB 检索到的值存储在内存中 而不是保存到文件中 结果我的程序崩溃了failed to allocate memory NoMemoryError 但没有必要将这些数据保存在
  • R:如何从 R 包中的 inst/extdata 延迟加载变量

    我的 inst extdata 中有一个文件 helper RData 文件 其中包含 我的包中的函数要使用的变量和数据集 但不意味着用户可以访问 我使用以下方法将其加载到包的开头 load system file extdata help
  • 在实现特征时如何明确指定生命周期?

    鉴于下面的实现 基本上我有一些可以通过 i32 id 字段或字符串字段查找的项目集合 为了能够互换使用 使用了特征 IntoKey 并且match分派到适当的查找映射 这一切都适合我的定义get内MapCollection impl use
  • React 16.8.6 对应的测试库/react 版本是什么?

    我正在尝试制作一个打字稿前端 但我无法使用react dom client导入是因为我已经缩小到我的测试库 反应版本与我的反应版本不对应的问题 我已经尝试了多个降级版本 但似乎无法让它工作 有什么解决办法吗 我会附上我的package js
  • 将请求传递给特定的分叉节点实例

    如果我错了 请纠正我 但不可能在同一端口上启动多个 http 服务器 基于此 有趣的是 NodeJS 集群可能会分叉 因为我知道有一个主人正在将请求传递给其中一个分叉工人 什么worker是由操作系统管理的或者cluster schedul
  • Amazon SES 停止工作

    我设置了 Amazon SES 它最初运行了几个小时 然后突然停止了 我发送的所有电子邮件以及我们的域都已经过验证 我们不会发送大量电子邮件 每天只发送几百封 每当我对 web config 进行更改时 它似乎又可以再工作 2 3 小时 例
  • Rails 3 link_to (:method => :delete) 不起作用

    我有Rails 中的动词有问题 查看资源 狗 的页面 该资源有很多 跳蚤 嵌入狗体内show html haml是一个电话render dog fleas它会自动 找到并使用 fleas flea html haml 中的模板来列出与所述狗
  • 单遍读取和验证 XML 与 C# 中引用的 XSD

    我正在尝试从 XML 文件中读取数据 并根据它建议的 XSD 对其进行验证 将其转换为单个数据结构 例如 XmlDocument 我有一个解决方案 但它需要两次通过文件 我想知道是否有单次解决方案 MyBooks xml
  • 如何在 PHP 中将数字格式化为美元金额

    如何将数字转换为显示美元和美分的字符串 eg 123 45 gt 123 45 123 456 gt 123 46 123 gt 123 00 13 gt 0 13 1 gt 0 10 0 gt 0 00 如果你只想要简单的东西 numbe
  • 如何在 Windows 命令行上以合适的格式获取当前日期/时间以在文件/文件夹名称中使用?

    更新 现在已经是 2016 年了 我会使用 PowerShell 来实现此目的 除非有真正令人信服的向后兼容的原因 特别是因为使用的区域设置问题date 请参阅 npocmaka 的https stackoverflow com a 197
  • Android 上的 pthread_create 警告

    打电话后pthread create函数我收到下一条消息 W libc 26409 pthread create sched setscheduler 调用失败 不允许操作 用于创建线程的代码是 pthread attr t threadA
  • 防止单个单词在 css/html 中环绕浮动

    有没有什么方法可以防止一个或两个单词环绕浮动 但如果有更多文本则允许它 这是一个示例 其中第一个文本有问题 但第二个文本很好 http jsfiddle net wdPCp http jsfiddle net wdPCp div class
  • AllowAnonymous 不适用于 Azure 广告身份验证

    我有一个 Asp net MVC 应用程序 在其中使用 Azure AD 身份验证来对用户进行身份验证 我想允许用户无需登录即可访问某些 api 控制器 我尝试将 AllowAnonymous 属性放在控制器顶部以跳过这些控制器进行身份验证