使用 ADFS 声明使用 .Net MVC 授权属性重定向循环

2023-11-25

我在使用 .Net MVC 5 应用程序配置 ADFS 时遇到问题。

我已经在 VS 2015 中将我的项目配置为使用声明,它工作正常,但我有一个问题。

我可以使用 ADFS 登录,我可以检查用户角色等。当我尝试使用时出现问题

[Authorize(Roles="somenonExistingRole")]

尽管我已经通过了身份验证,但当再次进行身份验证时,我会被重定向到 ADFS 页面,并且我会被重定向到发生循环的页面。页面将我发送到 ADFS 门户,ADFS 将我重定向到门户,经过几次尝试后,我从 ADFS 收到错误(对于许多请求)

我必须自己实现类似角色提供程序的东西吗?或者我需要配置一些额外的东西。也许我可以限制尝试次数?当我的角色已准备就绪时,为什么我会被重定向到 ADFS?

代码中实际上没有太多可显示的内容,按照要求: 我正在测试的控制器:

 public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
        [Authorize]
        public ActionResult About()
        {
            var u = HttpContext.User;


            if (u.IsInRole("/"))
            {
                ViewBag.Message = "User is in role.";
            }
            else
            {
                ViewBag.Message = "User is NOT in role.";
            }

            return View();
        }
        [Authorize(Roles = "/nonexistingRole")]
        public ActionResult Contact()
        {

            ViewBag.Message = "Your contact page.";

            return View();
        }
    }

和配置身份验证部分

public void ConfigureAuth(IAppBuilder app)
{
    app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

    app.UseCookieAuthentication(new CookieAuthenticationOptions());

    app.UseWsFederationAuthentication(
        new WsFederationAuthenticationOptions
        {
            Wtrealm = realm,
            MetadataAddress = adfsMetadata, 

        });
}

要解决循环问题,您应该覆盖AuthorizeAttribute.

默认情况下,当用户的角色不满足要求时,MVC 将返回 401 UnauthorizedAuthorizeAttribute要求。这将初始化对身份提供者的重新身份验证请求。由于用户已经登录,AAD 返回同一页面,然后发出另一个 401,创建重定向循环。在这里,我们重写 AuthorizeAttribute 的 HandleUnauthorizedRequest 方法以显示在我们的应用程序上下文中有意义的内容。

该类是在使用 VS 2015 创建新的 MVC 项目时生成的:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class AuthorizeAttribute : System.Web.Mvc.AuthorizeAttribute
{        
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (filterContext.HttpContext.Request.IsAuthenticated)
        {
            //One Strategy:
            //filterContext.Result = new System.Web.Mvc.HttpStatusCodeResult((int)System.Net.HttpStatusCode.Forbidden);

            //Another Strategy:
            filterContext.Result = new RedirectToRouteResult(
                new RouteValueDictionary(
                    new
                    {
                        controller = "Error",
                        action = "ShowError",
                        errorMessage = "You do not have sufficient priviliges to view this page."
                    })
                );
        }
        else
        {
            base.HandleUnauthorizedRequest(filterContext);
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ADFS 声明使用 .Net MVC 授权属性重定向循环 的相关文章

  • 同一服务器上的多个.NET版本

    所以我一直都知道在一台计算机 客户端或服务器 上运行多个版本的 NET 框架是可以的 这个问题 https stackoverflow com questions 407306 running many versions of net on
  • 使用实体框架重叠约会

    我将 asp net mvc 与实体框架一起使用 我有一个包含 startat 字段 endat 字段和 roomid 字段 称为 SpaceConfigurationId 的约会列表 并且希望查找给定房间已重复预订的约会列表 可以假设 e
  • 为什么当要求修剪“PRN.NUL”时,TrimStart 会更多地修剪字符?

    这是代码 namespace TrimTest class Program static void Main string args string ToTrim PRN NUL Console WriteLine ToTrim string
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • VB.NET 中的静态方法实现

    我很困惑Static在 VB NET 中的实现 在 C 中 我们可以创建静态类和静态方法来为我们的应用程序编写实用方法 现在 VB NET 让我们创建Module代替静态类 如果我们在模块中创建一个方法 默认情况下它会变成静态的 但在我的应
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 时间跨度格式[重复]

    这个问题在这里已经有答案了 当您将时间跨度声明为以下形式时 如何优雅地格式化时间跨度以表示 1 小时 10 分钟 TimeSpan t new TimeSpan 0 70 0 我当然知道你可以为此做一些简单的数学计算 但我有点希望 NET
  • 当操作系统显示语言为非英语时获取本地时区标识符

    奇怪的是 TimeZone CurrentTimeZone StandardName根据计算机显示语言返回本地化名称 我想要一个可以提供给的程序化标识符TimeZoneInfo在下面的代码中 TimeZoneInfo timeZoneInf
  • 家庭自动化图书馆[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我是一名 C 开发人员 希望将家庭自动化作为一种 爱好 我做了一些研究 但想知道是否有人知道支持 In
  • 为什么 new String("Hello") 在 C# 中无效?

    制作背后的逻辑 原因是什么 String s new String Hello World 在 C 中非法 错误是 string String char 的最佳重载方法匹配有一些无效参数 我对 API 文档不感兴趣 我感兴趣的是为什么这是非
  • 缺少添加控制器/视图的上下文菜单

    我已将 ASP NET MVC 4 集成到现有的 asp net 网站中 两者都工作正常 但我没有看到任何菜单 快捷方式来在 Visual Studio IDE 中创建控制器 视图 这些仅适用于 ASP NET MVC 模板吗 这些仅适用于
  • 使一个对象只能被同一程序集中的另一个对象访问?

    每个业务对象都有一个包含 sql 调用的匹配对象 我想限制这些 sql 对象 使其只能由匹配的业务对象使用 如何才能实现这一目标 Update 格雷格提出了关于可测试性的观点 由于 SqlObjects 将包含非常特定于业务流程的 sql
  • C# 和匿名对象数组

    这样的表达是什么意思呢 obj DataSource new new Text Silverlight Count 10 Link Tags Silverlight new Text IIS 7 Count 11 Link http iis
  • 自定义代码访问安全属性

    我创建了以下属性 Serializable AttributeUsage AttributeTargets Class AttributeTargets Method AllowMultiple true Inherited true pu
  • 没有强命名的代码签名是否会让您的应用程序容易被滥用?

    尝试了解authenticode代码签名和强命名 我是否正确地认为 如果我对引用一些 dll 非强命名 的 exe 进行代码签名 恶意用户就可以替换我的 DLL 并以看似由我签名但正在运行的方式分发应用程序他们的代码 假设这是真的 那么您似
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 如何强制 ssh 从命令行接受新的主机指纹?

    我得到了标准 WARNING REMOTE HOST IDENTIFICATION HAS CHANGED IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY Someone could
  • 使下拉菜单可滚动

    我正在尝试使用 CSS 和 jquery 在 HTML 页面中实现下拉菜单 以下是 HTML 和 JavaScript 代码的示例
  • Chrome tabs.onActivated.addListener 抛出“未定义”TypeError

    我正在做一个 chrome 扩展 文档中有这个说法 about chrome tabs onActivated 每当我尝试放置chrome tabs onActivated addListener 它说Uncaught TypeError
  • 使用 HTMLAgilityPack 仅提取页面文本

    好的 我对 HTMLAgilityPack 中使用的 XPath 查询非常陌生 所以让我们考虑这个页面http health yahoo net articles healthcare what your favorite flavor s
  • Qt - 没有这样的信号错误

    我试图在双击可拖动小部件之一时触发信号冰箱贴示例 以下是我对示例源代码所做的更改 拖动标签 class DragLabel public QLabel public DragLabel const QString text QWidget
  • 如何在Python中使用BeautifulSoup解析google搜索结果

    我正在尝试解析谷歌搜索结果的第一页 具体来说 是提供的标题和小摘要 这是我到目前为止所拥有的 from urllib request import urlretrieve import urllib parse from urllib pa
  • 获取特定用户的last_login时间? (姜戈)

    我有代码User objects values list last login flat True 这为我提供了所有用户最后一次登录的列表 但我不确定您如何精简对特定用户所做的操作 我尝试了以下代码User objects get user
  • 将浮点数序列化为 32 位整数的可移植方法

    我一直在努力寻找一种可移植的方法来序列化 C 和 C 中的 32 位浮点变量 以便将其发送到微控制器或从微控制器发送 我希望格式定义得足够好 以便序列化 反序列化也可以从其他语言完成 而不需要太多的努力 相关问题有 C 中 double f
  • PDO 多重查询

    从 PHP 版本 5 3 开始PDO MYSQL驱动程序已被替换为有利于PDO MYSQLND 它引入了对多个查询的支持 不过 如果有多个结果集 我不知道如何获得两个结果集SELECT查询已通过 两个查询都已执行 不可能是第二个查询刚刚被转
  • 删除 UICollectionView 边缘的单元格 - 滚动后单元格不会立即出现

    考虑一个标准的垂直滚动流布局 其中填充了足够的单元格以引起滚动 当滚动到底部时 如果删除一个项目 使得集合视图的内容大小必须缩小以容纳新的项目数 即删除底行的最后一个项目 则从滚动到底部的单元格行顶部被隐藏 在删除动画结束时 顶行出现时没有
  • 如何在angularjs中将html数据导出为pdf

    这是我渲染所有内容的 html 代码json数据来自 js文件但得到 类型错误 无法将未定义或 null 转换为对象 在Function keys 处 在 DocMeasure measureNode pdfmake js 15647 在
  • matlab中的3D体素显示

    我有一个网格 它是 3D 的并且存储一个数字 这是我的网格的示例 如果它是 2 2 2 1 gt 0 0 0 0 2 gt 0 0 0 0 如果那里不存在体素 数字 0 通常是我想用颜色或 nan 表示的数字 我想做的是用 matlab 显
  • 是否可以使 display:table-cell 布局响应式?

    在我的代码中 有一个表 其中有一个分区 其中的表行由水平的复选框组成 这是我的示例代码 完整的代码在小提琴中Here HTML table cellpadding 0 border 0 width 100 cellspacing 0 tr
  • BouncyCastle 上的椭圆曲线与数字签名算法 (ECDSA) 实施

    我正在尝试实现 ECDSA 椭圆曲线数字签名算法 但我在 Java 中找不到任何使用 Bouncy Castle 的示例 我创建了密钥 但我真的不知道应该使用什么样的函数来创建签名并验证它 public static KeyPair Gen
  • numpy.rint 可以返回 Int32 吗?

    我正在做 ret np rint y 4 return ret 我希望它回来Int32 我尝试添加dtype Int32 但它错误地说 TypeError No loop matching the specified signature a
  • 如何使用 OpenCV 制作反向填充透明矩形?

    我想在这张图片中制作一个反向填充的矩形 我的代码 import cv2 lena cv2 imread lena png output lena copy cv2 rectangle lena 100 100 200 200 0 0 255
  • ReportLab 图片链接

    有没有办法在 ReportLab 中向 Platypus 图像对象添加 href 链接 我知道如何在段落中的文本上添加链接 但我似乎找不到有关添加图像链接的任何信息 这可以通过以下方式轻松实现超链接图像类米斯梅利提出 from report
  • C 中允许的静态数组的最大大小是多少?

    在我的算法中 我知道使用静态数组 而不是动态数组 但我有时 达到堆栈的极限 我对吗 静态数组存储在堆栈中 哪些参数会影响一个 C 程序的最大堆栈大小 是否有许多系统参数影响最大数组大小 最大没有 元素的数量取决于数组类型 它取决于系统 RA
  • Windows XP 与 Vista/7 上的 MS Crypto API 行为

    我试图了解如何在 XP Vista 和 Windows 7 上从 PEM 格式 示例包含在下面的代码中 导入公钥 示例代码将在 XP 和 Windows Vista 7 上导入密钥 但不会一样的方法 在 Windows XP 上 字符串 原
  • 使用 ADFS 声明使用 .Net MVC 授权属性重定向循环

    我在使用 Net MVC 5 应用程序配置 ADFS 时遇到问题 我已经在 VS 2015 中将我的项目配置为使用声明 它工作正常 但我有一个问题 我可以使用 ADFS 登录 我可以检查用户角色等 当我尝试使用时出现问题 Authorize