首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Razor页面授权与外部cookie陷入循环

是一个涉及身份验证和授权的问题。在Razor页面中,我们可以使用ASP.NET Core的授权中间件来实现对页面或资源的访问控制。

当用户访问需要授权的Razor页面时,授权中间件会检查用户的身份验证状态。如果用户未经身份验证,授权中间件将重定向用户到登录页面。用户在登录页面提供凭据后,身份验证中间件会验证凭据并创建一个身份验证Cookie。然后,用户将被重定向回原始请求的Razor页面。

然而,当涉及到外部cookie时,可能会出现循环重定向的问题。这种情况下,用户在登录页面提供凭据后,身份验证中间件会创建一个身份验证Cookie并将其发送到浏览器。但是,由于某些原因,浏览器可能会将该Cookie视为外部Cookie,并在每次请求时都发送该Cookie。这导致授权中间件在每次请求时都会检查用户的身份验证状态,从而陷入循环重定向。

为了解决这个问题,我们可以在授权中间件中配置一个例外规则,以排除外部Cookie的检查。具体来说,我们可以使用AddAuthentication方法的AddCookie扩展方法来配置身份验证中间件,并在其中设置CookieAuthenticationOptionsCookieName属性来指定要排除的外部Cookie的名称。

以下是一个示例代码片段,展示了如何配置身份验证中间件以解决Razor页面授权与外部cookie陷入循环的问题:

代码语言:txt
复制
services.AddAuthentication(options =>
{
    options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie(options =>
{
    options.Cookie.Name = "MyAuthCookie";
    options.Cookie.SameSite = SameSiteMode.None;
    options.Events.OnRedirectToLogin = context =>
    {
        if (context.Request.Path.StartsWithSegments("/api"))
        {
            context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
        }
        else
        {
            context.Response.Redirect(context.RedirectUri);
        }
        return Task.CompletedTask;
    };
});

在上述示例中,我们将身份验证中间件配置为使用Cookie身份验证,并将Cookie的名称设置为"MyAuthCookie"。此外,我们还设置了SameSite属性为None,以确保Cookie可以在跨站点请求中发送。

需要注意的是,上述代码只是解决循环重定向问题的一种方式,具体的解决方法可能因应用程序的需求而有所不同。此外,还可以使用其他技术和方法来处理身份验证和授权,例如使用JWT令牌、OAuth等。

对于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,我无法提供相关链接。但是,腾讯云提供了一系列云计算服务,包括云服务器、云数据库、云存储等,您可以访问腾讯云官方网站获取更多信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ASP.NET Core 3.0 的新增功能

Razor 组件 Blazor 应用程序是由组件 (components) 构建而成的。组件是自包含的用户界面元素,例如页面、对话框或者表单等。...Razor 组件 Razor Pages(页面)和 MVC 视图 (view) 相似,因为它们都使用 Razor基于“请求-响应”模型的页面视图不同,组件专门用于处理 UI 合成。...新的 Razor 指令 以下列表包含了新的 Razor 指令: @attribute — @attribute 指令将给定属性应用于生成页面或者视图的类。...模板变更 Web UI 模板(Razor Pages, 带有控制器和视图的 MVC)已删除以下内容: “Cookie 同意” UI 不再包含在内。...默认情况下,Razor 类库 (RCL) 模板默认为用于 Razor 组件开发。Visual Studio 中新的模板选项为页面和视图提供模板支持。

6.7K30

ASP.NET Core 各版本特性简单整理

类库(Razor Class Library) Identity UI 库 HTTPS GDPR(注:刚出来时,很多人发现Cookie写入不了就是因为开启了它) 集成测试 [ApiController...System.Text.Json 来进行序列化 ASP.NET Core 中默认不再使用 WebHostBuilder ,而是使用 HostBuilder(可以更好地将 ASP.NET Core 应用非...同步IO),线程不足会导致应用崩溃,而同步 I/O API(例如 HttpRequest.Body.Read)是导致线程不足的常见原因 根据请求提供事件计数器 增强了端点路由,可以让框架(例如 MVC)中间件配合使用...组件的分部类支持 HTTP.sys 中对共享队列的支持 SameSite cookie(这可能会影响 AzureAd、OpenIdConnect 或 WsFederation 等身份验证场景...支持并行调用,允许客户端一次调用多个Hub方法 自定义处理授权失败,使用由授权中间件调用的新 IAuthorizationMiddlewareResultHandler 接口可以更轻松地自定义处理授权失败

3.3K20

.NET Core实战项目之CMS 第十四章 开发篇-防止跨站请求伪造(XSRFCSRF)攻击处理

ASP.NET Core 中包含管理身份验证、授权、数据保护、SSL 强制、应用机密、请求防伪保护及 CORS 管理等等安全方面的处理。...获取到 cookie_session_id,保存到浏览器 cookie 中。 在未登出服务器 A ,并在 session_id 失效前用户浏览位于 hacked server B 上的网站。..., Microsoft.AspNetCore.Mvc.TagHelpers 提示: Razor页面会自动受到XSRF/CSRF的保护。...您不必编写任何其他代码,有关详细信息,请参阅XSRF/CSRF和Razor页面。 为抵御 CSRF 攻击最常用的方法是使用同步器标记模式(STP)。...选项 描述 Cookie 确定用于创建防伪 cookie 的设置。 FormFieldName 防伪系统用于呈现防伪令牌在视图中的隐藏的窗体字段的名称。

3.9K20

Blazor.Server以正确的方式 丶集成Ids4

但是我们的项目毕竟是服务端,Blazor服务端使用ids4,感觉和MVC还是有些相似的,都是基于Cookie的oidc认证模式。...重点是要配置那几个Scope作用域,然后可以看到有ids4的授权页面,当然,这个页面也可以屏蔽掉不显示。...权限组件 Blazor自带了相应的授权组件,可以很好的帮助我们来实现对权限的控制,只需要在App.razor中: @inject NavigationManager NavManager <Router...razor页面加权 只需要在需要的页面内增加特性即可: @attribute [Authorize] 展示用户状态 刚刚上边我们已经配置好了用户登录和登出接口,也对页面进行了加权,用来引导用户去认证中心登录...服务注册容器 把上边的两个服务注册下: // 第三部分:授权状态的保护管理 services.AddSingleton(); // 开启AuthenticationStateProvider

1.5K10

实战解读ASP.NET Core身份认证

授权是确定用户是否有权访问资源的过程。 1....我们口头上常说的: 基于cookie认证方案,若认证成功,go on,若认证失败则跳转回登录页面; 基于基本身份认证(BA)方案,若认证成功,go on,若认证失败则给浏览器返回WWW-Authenticate...ASP.NET Core认证原理 在 ASP.NET Core 中,身份验证由IAuthenticationService负责,身份验证服务会调用已注册的身份验证处理程序来完成身份验证相关的操作, 整个验证过程由认证中间件来串联...挑战(对未认证的用户做出的反应): 例如返回登录页面 禁止(对已认证,但对特定资源无权访问做出的反应) :例如返回提示字符串 以上均为服务注册过程 收到请求,认证中间件使用IAuthenticationService...实际上Razor Page、Razor View、Middleware均包含HttpContext属性/参数, 可直接使用。

1.7K10

Blazor入门:ASP.NET Core Razor 组件

目录 关于组件 组件类 静态资产 路由路由参数 组件参数 请勿创建会写入其自己的组参数属性的组件 子内容 属性展开 任意参数 捕获对组件的引用 在外部调用组件方法以更新状态 使用 @ 键控制是否保留元素和组件...关于组件 .razor 文件分为页面(带@page)和组件(不带@page,或者说页面组件和非页面组件。...本文接下来所指的组件都是非页面组件。 .razor 文件中,开头有 @page 标记的,就是页面组件,没有的就是非页面组件。 当然两者并没有严格的区分。...组件类 每个 .razor 文件,在编译后会生成一个类,称为组件类。 生成的类的名称文件名匹配。 因此,每个 .razor 文件,必须以大写字母开头,按照类名命名规范定义文件名称。...路由路由参数 页面组件使用 @page 设置此页面的访问地址,这里没有 Controller 和 Action 的分层和路由导航(相对地址),直接是一个绝对的访问地址,并且全局唯一。

2.7K20

ASP.NET MVC编程——验证、授权安全

主动注入:用户将含有恶意脚本的内容输入到页面文本框中,然后在屏幕上显示出来。...防御方法: 1)使用Razor语法输出的内容已经被编码,可以不做任何其他处理 例如: @Model.Field 2)大部分的XSS攻击可通过对输入内容进行编码来阻止:Html.Encode...中写入一个加密的数据,并在表单内插入一个隐藏栏位,每次刷新页面时隐藏栏位的值都不同,每次执行控制器操作前,都会验证隐藏栏位和浏览器cookie中的值是否相同,只有相同才允许执行控制器操作。...盗窃 cookie有两种形式 1)会话cookie:存储在浏览器内存中,浏览器每次请求通过Http头进行传递 2)持久性cookie:存储在硬盘上,同样通过Http头进行传递 二者的区别:会话cookie...www.asp.net/mvc ----------------------------------------------------------------------------------------- 转载引用请注明出处

3.1K60

Blazor版俄罗斯方块游戏部署成功

,和这几天开发、部署遇到的一些问题解决方案记录分享下。.../Pages下的razor文件 为各个游戏页面,比如Tetris.razor,这个文件我们可以直接复制到自己的项目,去掉页面下方的文章链接即可。 1.2.2....知道如果要在自己的项目正常运行俄罗斯游戏需要这些文件: 应用样式(css/app.cs)、游戏部分样式(css/games.css)、俄罗斯方块图片(images/tetrix)、游戏音乐播放和游戏分数的Cookie...Razor共享库代码组织结构,目前已有的在线工具和在线游戏组件: 组件代码在前面几篇文章都贴过,这里略过,但游戏页面的路由这里提一下:Dotnet9网站和Dotnet工具箱的网页布局是不同的,相同的是里面的内容...,所以每个工具和游戏在两个工程里都添加了对应的页面路由,比如下面的俄罗斯方块页面在两个工程中的位置: Dotnet9中的俄罗斯方块页面: Dotnet工具箱的俄罗斯方块页面: 两个页面内容几乎完全相同

21230

.NET Core 3.0 Preview 6中对ASP.NET Core和Blazor的更新

以下是此预览版中的新增功能列表: 新Razor特性:@attribute,@code,@key,@namespace,@functions中的标记 Blazor指令属性 Blazor应用程序的身份验证和授权支持...该@namespace指令现在适用于页面和视图(.cshtml)应用程序,但现在它也支持组件(.razor)。... Blazor应用程序的身份验证和授权支持Blazor现在内置了对处理身份验证和授权的支持。...您还可以指定AuthorizeView用户必须满足的特定角色或授权策略才能查看授权视图。要授权访问Blazor应用程序中的特定页面,请使用普通的[authorize]属性。...@using Microsoft.AspNetCore.Authorization @attribute [Authorize] @page "/fetchdata" 要指定在未授权用户或仍处于授权处理时需要授权页面上显示的内容

6K20

@helper的使用

Razor最大程度的减少了编写视图模板(译者注:前端页面)时需要输入的字符数和键盘敲击次数,提供了一个快速和流畅的编码体验。...大多数模板语言不同,使用Razor你不在需要使用一些开始和关闭标记来打断你的编码(译者注:像aspx的),Razor的语法分析器能够智能的识别代码。...标准C#/VB代码不同的是,你除了可以写服务端代码以外,还可以写入HTML,以及其他Razor支持的语法。...你可以像调用标准C#或VB代码一样调用它们 VS也同样会为它生成智能提示信息: 下面来讨论在多个视图页面共享helper方法: 在上面的例子中,我们定义了自己的helper方法,该方法调用代码在同一个视图模板中...我们其实可以将方法定义在视图模板外部,并且让它可以被所有的视图模板所公用。 要实现这个功能,我们需要把定义helper方法的文件放在App_Code目录下。这个目录通常应该在项目根目录下。

1.1K10

ASP.NET Core Blazor 初探之 Blazor WebAssembly

配置HttpClient注入 让我们切换回BlazorWebAssemblyApp项目。我们的Blazor项目需要通过HttpAPI站点进行通信,所以肯定需要一个访问Http的类库。..._stutdents = students; } } 这个文件大体上看跟RazorPages的页面差不多,Html主体使用razor语法渲染。...这个类里的变量可以作为razor模板的数据源,可以进行绑定或者for循环。...组件属性 我们封装组件经常对外暴露属性,以便接受外部传入的数据,比如我们这个Edit组件就需要外部传入一个Student对象才能正常工作。...组件事件 我们除了需要对外暴露属性,常常还需要对外暴露事件,用来通知外部组件。当外部组件接受到事件的时候可以进行相应的处理。

6.5K10

.NET Core 3.0 Preview 6中对ASP.NET Core和Blazor的更新

code,@key,@namespace,@functions中的标记 Blazor指令属性 Blazor应用程序的身份验证和授权支持 Razor类库中的静态资产 Json.NET不再在项目模板中引用...该@namespace指令现在适用于页面和视图(.cshtml)应用程序,但现在它也支持组件(.razor)。... Blazor应用程序的身份验证和授权支持 Blazor现在内置了对处理身份验证和授权的支持。...您还可以指定AuthorizeView用户必须满足的特定角色或授权策略才能查看授权视图。 要授权访问Blazor应用程序中的特定页面,请使用普通的[authorize]属性。...@using Microsoft.AspNetCore.Authorization @attribute [Authorize] @page "/fetchdata" 要指定在未授权用户或仍处于授权处理时需要授权页面上显示的内容

6.7K20

ASP.NET安全

需要注意的是,认证授权是是完全不一样的概念,我们要区别对待。打个比方,在ASP.NET MVC里面允许某一类用户访问某个Action就是授权。...Forms认证默认是依靠cookie技术实现的,一旦某个用户登录站点,那么用户所使用的这个浏览器就会得到一个cookie并且在后面所有这个站点的其它请求中都会将这个cookie包含在http的头中。...否则我们就会得到以下错误页面。 ?...授权 授权允许我们传递一些参数去设置规则,我们可以告诉Authroize属性只有某些具体用户才可以访问某个Action。 ? 同时 ,我们还可以为Authorize属性指定 Roles。...在ASP.NET MVC中razor默认会对所有输出进行html编码。这是ASP.NET MVC针对XSS攻击的另一道防火墙。

2.6K80

【译】.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容

同一个ASP.NET Core项目可以包含Razor组件、页面和视图。Razor组件模板与其他ASP.NET Core Web应用程序模板一样,默认情况下也启用了HTTPS。...新的Razer扩展 Razor组件使用Razor语法编写,但编译方式Razor页面和视图不同。为了明确哪些Razor文件应该编译为Razor组件,我们引入了一个新的文件扩展名:.razor。...在Razor组件模板中,所有组件文件现在都使用.razor扩展名。Razor页面和视图仍然使用.cshtml扩展名。...该页面还引用components.server.js脚本,在预呈现和下载内容后设置SignalR 连接。由于这是一个Razor页面,像环境标签助手这样的功能就可以工作了。...另外,Razor类库还不支持静态资源。如果要在库中创建可Blazor和Razor组件应用程序共享的组件,仍然需要使用Blazor类库。这写问题会在未来的更新中解决。

22.6K10

全面的ASP.NET Core Blazor简介和快速入门

更多请查看ASP.NET Core 的 Razor 语法。 Razor 操作符 Razor 操作符是用于将 Razor 代码 HTML 元素相互关联的语法。... break; } 语句循环 @for, @foreach, @while, and @do while 可以使用循环控制语句呈现模板化 HTML。...App.razor 为应用的根组件。 Pages 存放应用程序的 Razor 页面,每个 Razor 页面都对应着一个组件,用于呈现应用程序的 UI 元素。...App.razor是应用程序的启动路由页面,里面规定了默认Layout。 Pages 存放应用程序的 Razor 页面,每个 Razor 页面都对应着一个组件,用于呈现应用程序的 UI 元素。...SPA(single-page application),翻译过来就是单页应用SPA是一种网络应用程序或网站的模型,它通过动态重写当前页面用户交互,这种方法避免了页面之间切换打断用户体验在单页应用中

92020
领券