이 글에서는 ASP.NET Core에서 쿠키미들웨어를 사용하는 방법에 대한 자세한 설명을 주로 소개하고 있는데, 이는 어느 정도 참고할만한 가치가 있으며, 관심 있는 친구는
http://ASP.NET Core에서 쿠키 미들웨어 사용
ASP.NET Core는 쿠키 미들웨어 구성 요소를 제공하여 사용자 주제를 암호화된 쿠키를 확인하고 후속 요청에서 이 쿠키를 확인한 후 사용자를 재현하고 이를 HttpContext 객체의 User 속성에 할당합니다. 자신만의 로그인 방법과 사용자 데이터를 제공하려는 경우 쿠키 미들웨어를 사용하여 독립적인 기능을 구현할 수 있습니다.
추가 및 구성
첫 번째 단계는 애플리케이션에 쿠키 미들웨어를 추가하는 것입니다. 먼저 nuget을 사용하여 Microsoft.AspNetCore.Authentication.Cookies 패키지를 추가합니다. 그런 다음 app.UseMvc() 앞에 Startup.cs 파일의 구성 메서드에 다음 코드 줄을 추가합니다.
app.UseCookieAuthentication(new CookieAuthenticationOptions() { AuthenticationScheme = "MyCookieMiddlewareInstance", LoginPath = new PathString("/Account/Unauthorized/"), AccessDeniedPath = new PathString("/Account/Forbidden/"), AutomaticAuthenticate = true, AutomaticChallenge = true });
위의 코드 조각은 여러 옵션을 구성합니다.
인증 방식: 알려진 미들웨어의 인스턴스가 여러 개인 경우 이 옵션은 다음과 같습니다. 인증을 인스턴스로 제한하려는 경우 유용합니다.
로그인 경로: 사용자가 리소스에 액세스하려고 시도했지만 인증되지 않은 경우 프로그램이 요청을 리디렉션할 상대 경로입니다.
금지된 액세스 경로: 사용자가 리소스에 대한 인증 정책을 전달하지 않고 리소스에 액세스하려고 하면 요청이 이 상대 경로로 리디렉션됩니다.
자동 인증: 이 플래그는 미들웨어가 모든 요청에 대해 생성한 직렬화된 본문을 검증하고 재구성해야 함을 나타냅니다.
자동 도전: 이 플래그는 미들웨어 인증이 실패할 경우 브라우저를 로그인 경로로 리디렉션하거나 액세스 경로를 금지해야 함을 나타냅니다.
기타 옵션에는 미들웨어에 의해 생성된 클레임 발급자 설정, 미들웨어에 의해 저장된 쿠키 이름, 쿠키 도메인 및 다양한 보안 속성 설정이 포함됩니다. 쿠키에. 기본적으로 쿠키 미들웨어는 적절한 보안 옵션을 사용하여 HTTPONLY를 설정하여 클라이언트 측에서 JavaScript에 의해 쿠키가 조작되는 것을 방지합니다. 요청 방법이 HTTPS인 경우 쿠키의 HTTPS 작동을 제한합니다.
쿠키 생성
자신의 정보를 저장하려면 쿠키를 생성해야 합니다. 저장하려는 사용자 정보를 직렬화하여 저장하려면 ClaimsPrincipal(유형)을 초기화해야 합니다. 매력적인 여자. 각 메서드 호출에는 컨트롤러(Controller)에 적절한 ClaimsPrincipal 개체가 있습니다.
코드 복사 코드는 다음과 같습니다.
await HttpContext.Authentication.SignInAsync("MyCookieMiddlewareInstance", principal);
위 코드는 암호화된 쿠키를 생성하여 현재 요청 응답에 추가합니다. AuthenticationScheme에서는 구성 기간 동안 현재 사용자의
로그아웃, 삭제로그인을 명시적으로 규정하고 있습니다. 쿠키 정보를 확인하려면 컨트롤러에서 다음 메서드를 호출할 수 있습니다.
코드 복사 코드는 다음과 같습니다.
await HttpContext.Authentication.SignOutAsync("MyCookieMiddlewareInstance");
백엔드 변경에 대한 응답
경고
일단 쿠키가 생성되면 백엔드 시스템을 더 이상 사용할 수 없더라도 미들웨어는 이를 인식하지 못하고 쿠키가 만료될 때까지 로그인 상태를 유지합니다.
쿠키 인증 미들웨어는 옵션 클래스에서 일련의 이벤트를 제공하며, 그중 ValidateAsync() 이벤트를 사용하여 쿠키를 중단하고 다시 작성할 수 있습니다. 방법.
백그라운드 사용자의 데이터베이스에 '마지막 수정 시간' 열이 있을 수 있다는 점을 고려하여, 데이터베이스 수정 후 현재 쿠키를 무효화하기 위해 먼저 이 쿠키를 생성할 때 마지막 수정 문을 추가하고 포함합니다. 현재 값. 데이터베이스의 데이터가 변경되면 이 값도 동시에 업데이트됩니다.
ValidateAsync()의 이벤트 재정의를 구현하려면 다음 서명을 사용하여 메서드를 작성해야 합니다.
Task ValidateAsync(CookieValidatePrincipalContext context);
ASP.NET Core 인증은 SecurityStampValidator에서 이 유효성 검사를 구현합니다. 비슷한 예는 다음과 같습니다.
public static class LastChangedValidator { public static async Task ValidateAsync(CookieValidatePrincipalContext context) { // Pull database from registered DI services. var userRepository = context.HttpContext.RequestServices.GetRequiredService<IUserRepository>(); var userPrincipal = context.Principal; // Look for the last changed claim. string lastChanged; lastChanged = (from c in userPrincipal.Claims where c.Type == "LastUpdated" select c.Value).FirstOrDefault(); if (string.IsNullOrEmpty(lastChanged) || !userRepository.ValidateLastChanged(userPrincipal, lastChanged)) { context.RejectPrincipal(); await context.HttpContext.Authentication.SignOutAsync("MyCookieMiddlewareInstance"); } } }
쿠키 미들웨어 구성 중에 등록해야 합니다
app.UseCookieAuthentication(options => { options.Events = new CookieAuthenticationEvents { // Set other options OnValidatePrincipal = LastChangedValidator.ValidateAsync }; });
如果你想非破坏性的更新用户主体,例如,name更新了,要想以不影响安全的方式你可以调用 context.ReplacePrincipal() 并且设置 context.ShouldRenew 为 true 。
控制Cookie选项
CookieAuthenticationOptions配备了各种各样的配置选项是你能够很好的调节创建的Cookie。
ClaimsIssuer - 被用来在任何中间件创建的属性之上。(看不懂)
CookieDomain - 如果cookie domain被设置为 ** . http:// contoso.com ** 那么 contoso.com, http://www. contoso.com,staging.contoso.com 等等类似这样的域名也会被允许。
CookieHttpOnly - 这个标志指示这个 cookie 只会被服务端访问。默认值是true,修改这个属性将会开放你的应用造成 Cookie 盗窃,造成跨站脚本的bug。
CookiePath - 这个可以用来隔离运行在同一个 host 下的应用。如果你有一个应用运行在 /app1 上,并且想限制 cookie 限制仅仅被发送给自己,那么你应该设置 CookiePath 属性为 /app1 ;Cookie将会明白只适用于道 /app1 或者他下面的请求。
ExpireTimeSpan - 这个 TimeSpan 时间段之后 Cookie 将会过期。
SlidingExpiration - 这个标志标记了如果超过了过期时间的一半后被访问那么Cookie将会被重置。新的过期时间将会后移到当前时间加上ExpireTimespan之后。当调用 SignInAsync 时可以通过 ** AuthenticationProperties ** 设置绝对的过期时间。通过限制验证cookie有效的时间,绝对期满可以提高应用程序的安全性。
持续性Cookie和绝对过期时间
您可能希望通过浏览器会话使cookie过期。也许你也想通过绝对过期时间和认证来结束cookie,那么你可以在登录认证和创建Cookie时使用HttpContext.Authentication.SignInAsync方法中的AuthenticationProperties参数类实现。AuthenticationProperties类在Microsoft.AspNetCore.Http.Authentication命名空间中。
例如
await HttpContext.Authentication.SignInAsync( "MyCookieMiddlewareInstance", principal, new AuthenticationProperties { IsPersistent = true });
这个代码片段将会实现创建一个认证和相应的Cookie来实现即时浏览器关闭Cookie也能继续保留。任何在cookie属性中的过期时间的设置都将会保存下来。如果浏览器关闭时Cookie也过期了那么在重新启动浏览器是Cookie将会别清理。
await HttpContext.Authentication.SignInAsync( "MyCookieMiddlewareInstance", principal, new AuthenticationProperties { ExpiresUtc = DateTime.UtcNow.AddMinutes(20) });
这段代码将创建一个身份认证和相应的cookie且将持续20分钟。 任何在Cookie options中配置的动态选项都会被忽略。 ExpiresUtc 和 IsPersistent 这两个属性是相互独立的。
其实上面bb了那么多,都没用! 不如来个demo
// 1. 在Startup.cs的Configure方法中加上 app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationScheme = "UserAuth", // Cookie 验证方案名称,在写cookie时会用到。 AutomaticAuthenticate = true, // 是否自动启用验证,如果不启用,则即便客服端传输了Cookie信息,服务端也不会主动解析。除了明确配置了 [Authorize(ActiveAuthenticationSchemes = "上面的方案名")] 属性的地方,才会解析,此功能一般用在需要在同一应用中启用多种验证方案的时候。比如分Area. LoginPath = "/User/Index" // 登录页 }); // 2. 新建UserController // 3. 创建一个测试登录的方法(这里为了方便测是我用的是get方法,方便传参请求) public IActionResult Login(int userId, string userName) { WriteUser(userId, userName); return Content("Write"); } private async void WriteUser(int userId, string userName) { var identity = new ClaimsIdentity("Forms"); // 指定身份认证类型 identity.AddClaim(new Claim(ClaimTypes.Sid, userId.ToString())); // 用户Id identity.AddClaim(new Claim(ClaimTypes.Name, userName)); // 用户名称 var principal = new ClaimsPrincipal(identity); await HttpContext.Authentication.SignInAsync("UserAuth", principal, new AuthenticationProperties { IsPersistent = true , ExpiresUtc = DateTime.UtcNow.AddMinutes(20) }); //过期时间20分钟 } // 4. 创建一个退出登录的方法 public async Task<ActionResult> Logout() { await HttpContext.Authentication.SignOutAsync("UserAuth"); // Startup.cs中配置的验证方案名 return RedirectToAction("User", "Index"); } // 5. 创建一个获取cookie用户信息的方法方便调用 private int GetUserId() { //var userName = User.Identity.Name; //获取登录时存储的用户名称 var userId = User.FindFirst(ClaimTypes.Sid).Value; // 获取登录时存储的Id if (string.IsNullOrEmpty(userId)) { return 0; } else { return int.Parse(userId); } } // 或者写一个测试Action public JsonResult CheckLogin() { var userName = User.Identity.Name; //获取登录时存储的用户名称 var userId = User.FindFirst(ClaimTypes.Sid).Value; // 获取登录时存储的Id return Json({UserId:userId,UserName:userName}); } // 6. 以上是加密的方式如果直接写好像也是可以的 HttpContext.Response.Cookies.Append("Key", "Value");
위 내용은 ASP.NET Core에서 쿠키 미들웨어를 사용하는 방법에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

C#.NET은 여러 응용 프로그램 개발을 지원하는 강력한 도구 및 라이브러리를 제공하기 때문에 여전히 중요합니다. 1) C#은 .NET 프레임 워크를 결합하여 개발 효율적이고 편리하게 만듭니다. 2) C#의 타입 안전 및 쓰레기 수집 메커니즘은 장점을 향상시킵니다. 3) .NET은 크로스 플랫폼 실행 환경과 풍부한 API를 제공하여 개발 유연성을 향상시킵니다.

C#.NETISVERSATILEFORBOTHWEBBANDDESKTOPDEVENTROMMENT.1) FORWEB, useASP.NETFORRICHINTERFACES.3) FORDESKTOP.3) USEXAMARINFORCROSS-PLATFORMDEEVENTRIMMENT, LINABILEDEV, MACODEDEV, and MACODEDOWS, 및 MACODEDOWS.

C# 및 .NET는 지속적인 업데이트 및 최적화를 통해 신흥 기술의 요구에 적응합니다. 1) C# 9.0 및 .NET5는 레코드 유형 및 성능 최적화를 소개합니다. 2) .NETCORE는 클라우드 네이티브 및 컨테이너화 된 지원을 향상시킵니다. 3) ASP.NETCORE는 최신 웹 기술과 통합됩니다. 4) ML.NET는 기계 학습 및 인공 지능을 지원합니다. 5) 비동기 프로그래밍 및 모범 사례는 성능을 향상시킵니다.

C#.netissuitable forenterprise-levelapplications는 richlibraries, androbustperformance, 그러나 itmaynotbeidealforcross-platformdevelopmentorwhenrawspeediscritical, wherelanguagesslikerustorthightordogrordogrognegrognegrognegrognecross-platformdevelopmentor.

.NET에서 C#의 프로그래밍 프로세스에는 다음 단계가 포함됩니다. 1) C# 코드 작성, 2) 중간 언어 (IL)로 컴파일하고 .NET 런타임 (CLR)에 의해 실행됩니다. .NET에서 C#의 장점은 현대적인 구문, 강력한 유형 시스템 및 .NET 프레임 워크와의 긴밀한 통합으로 데스크탑 응용 프로그램에서 웹 서비스에 이르기까지 다양한 개발 시나리오에 적합합니다.

C#은 Microsoft가 개발 한 최신 객체 지향 프로그래밍 언어이며 .NET 프레임 워크의 일부로 개발되었습니다. 1.C#은 캡슐화, 상속 및 다형성을 포함한 객체 지향 프로그래밍 (OOP)을 지원합니다. 2. C#의 비동기 프로그래밍은 응용 프로그램 응답 성을 향상시키기 위해 비동기 및 키워드를 기다리는 키워드를 통해 구현됩니다. 3. LINQ를 사용하여 데이터 컬렉션을 간결하게 처리하십시오. 4. 일반적인 오류에는 NULL 참조 예외 및 인덱스 외 예외가 포함됩니다. 디버깅 기술에는 디버거 사용 및 예외 처리가 포함됩니다. 5. 성능 최적화에는 StringBuilder 사용 및 불필요한 포장 및 Unboxing을 피하는 것이 포함됩니다.

C#.NET 애플리케이션에 대한 테스트 전략에는 단위 테스트, 통합 테스트 및 엔드 투 엔드 테스트가 포함됩니다. 1. 단위 테스트를 통해 MSTEST, NUNIT 또는 XUNIT 프레임 워크를 사용하여 코드의 최소 단위가 독립적으로 작동합니다. 2. 통합 테스트는 일반적으로 사용되는 시뮬레이션 된 데이터 및 외부 서비스를 결합한 여러 장치의 기능을 확인합니다. 3. 엔드 투 엔드 테스트는 사용자의 완전한 작동 프로세스를 시뮬레이션하며 셀레늄은 일반적으로 자동 테스트에 사용됩니다.

C# 수석 개발자와의 인터뷰에는 비동기 프로그래밍, LINQ 및 .NET 프레임 워크의 내부 작업 원리와 같은 핵심 지식을 마스터하는 것이 필요합니다. 1. 비동기 프로그래밍은 비동기를 통해 작업을 단순화하고 응용 프로그램 응답 성을 향상시키기 위해 기다리고 있습니다. 2.linq는 SQL 스타일로 데이터를 운영하고 성능에주의를 기울입니다. 3. Net Framework의 CLR은 메모리를 관리하며 가비지 컬렉션은주의해서 사용해야합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.
