рдЖрдЧрд╛рдореА ASP.NET рдФрд░ ASP.NET Core рдореЗрдВ рд╕рдорд╛рди рдХреБрдХреА рдкрд░рд┐рд╡рд░реНрддрди

рд╕реЗрдорд╕рд╛рдЗрдЯ рдПрдХ 2016 HTTP рдХреБрдХреА рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рдХреНрд░реЙрд╕-рд╕рд╛рдЗрдЯ рдЕрдиреБрд░реЛрдз рдЬрд╛рд▓рд╕рд╛рдЬреА (рд╕реАрдПрд╕рдЖрд░рдПрдл) рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдЗрд╕рдХрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдереА рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдХреАрдЬрд╝ рдореЗрдВ рдПрдХ рдирдИ рд╕рдорд╛рди рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝рдХрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рджреЛ рдЕрд░реНрде рдереЗ, рд▓реИрдХ рдФрд░ рд╕реНрдЯреНрд░рд┐рдХреНрдЯред

рд▓рдХреНрд╖реНрдордг рдорд╛рди рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреБрдХреАрдЬрд╝ рдХреЛ рдПрдХ рд╕рд╛рдЗрдЯ рдкрд░ рд╕рд░реНрдлрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╛ рдЕрдиреНрдп рд╕рд╛рдЗрдЯреЛрдВ рд╕реЗ рдЕрдкрдиреА рд╕рд╛рдЗрдЯ рдкрд░ рдЬреАрдИрдЯреА рд╕рд░реНрдлрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреЗрд╡рд▓ рдПрдХ рд╕рд╛рдЗрдЯ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдЦреНрдд рдореВрд▓реНрдп рд╕реАрдорд┐рдд рдХреБрдХреАрдЬрд╝ред рдХрд┐рд╕реА рднреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдХрдореА рдХреБрдХреАрдЬрд╝ рдкрд░ рдХреЛрдИ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред OpenIdConnect рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди рдСрдкрд░реЗрд╢рдВрд╕ (рдЬреИрд╕реЗ, рд▓реЙрдЧ рдЗрди рдХрд░рдирд╛, рд▓реЙрдЧ рдЖрдЙрдЯ рдХрд░рдирд╛) рдФрд░ рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЬреЛ рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рд╕рд╛рдЗрдЯ рд╕реЗ POST рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рд╛рдЗрдЯ рдкрд░ рднреЗрдЬрддреЗ рд╣реИрдВ, рдЬреЛ рдСрдкрд░реЗрд╢рди рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рдХреБрдХреАрдЬрд╝ рдХреЛ рд╕рд╣рд╕рдВрдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдФрд░ / рдпрд╛ CSRF рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдХреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрди рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпреЛрдВ рдХреЛ рдПрдХ рд╕рдореНрдкрддреНрддрд┐ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд┐рдирд╛ рд╕реЗрдорд╕рд╛рдЗрдЯ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдЗрди рдХреБрдХреАрдЬрд╝ рдХреЛ рдЙрдирдХреЗ рд╡рд┐рд╢реЗрд╖ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╡рд╛рд╣ рдХреЗ рджреМрд░рд╛рди рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред

Google рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдорд╛рдирдХ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдХреНрд░реЛрдо рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкреЗрд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдЙрд╕реА рд╕рдорд╛рди "рдХреЛрдИ рдирд╣реАрдВ" рдореВрд▓реНрдп рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ "рд▓рдХреНрд╖" рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдпрд╣ OpenIdConnect рд▓реЙрдЧрд┐рди рдФрд░ рд╕рдВрднрд╡рддрдГ рдЕрдиреНрдп рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдмрди рд╕рдХрддреА рд╣реИрдВред рдЗрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреБрдХреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬрд┐рдирдХреА рд╕рдорд╛рди рд╕рдВрдкрддреНрддрд┐ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдРрд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЬреЛ рдореВрд▓ рдорд╛рдирдХ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдирдП рдореВрд▓реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдирдП рдорд╛рдирдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреА .NET рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЛ рдЕрдм рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдЬреЗрдВрдЯ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдирдпрд╛ рдореВрд▓реНрдп рдирд╣реАрдВ рднреЗрдЬрдирд╛ рд╣реИ рдпрд╛ рд╕рднреА рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рднреЗрдЬрдирд╛ рд╣реИред



.NET рдХреЛ Google рдХреЗ рдирдП рдореВрд▓реНрдп рдХреА рд╢реБрд░реВрдЖрдд рдХреЗ рдЕрдиреБрдХреВрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП .NET 4.7.2 рдФрд░ .NET рдХреЛрд░ 2.1 рдореЗрдВ рд╕рдорд╕реИрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдмрд╛рдж рдореЗрдВ рдЕрдкрдбреЗрдЯ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдЕрджреНрдпрддрди 19 рдирд╡рдВрдмрд░ рдХреЛ Microsoft рдЕрджреНрдпрддрди рдФрд░ WSUS рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдкрдбреЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдЪреЗрдХ рдлреЙрд░ рдЕрдкрдбреЗрдЯреНрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред 10 рджрд┐рд╕рдВрдмрд░ рдХреЛ, рдЕрдкрдбреЗрдЯ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ Microsoft рдЕрджреНрдпрддрди рдХреЗрдВрджреНрд░ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред .NET рдХреЛрд░ рдЕрдкрдбреЗрдЯ рдирд╡рдВрдмрд░ рдореЗрдВ .NET рдХреЛрд░ 3.1 рдХреЗ рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛, рдЬреЛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 1 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдЧрд╛ред

.NET Core 3.1 рдореЗрдВ рдПрдХ рдЕрджреНрдпрддрди рдПрдиреБрдо рдкрд░рд┐рднрд╛рд╖рд╛ , SameSite.Unspecified рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧреА, рдЬреЛ рд╕рдорд╛рди рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░реЗрдЧреАред

Microsoft.Owin v4.1 рдФрд░ .NET рдХреЛрд░ рдХреЗ рд▓рд┐рдП OpenIdConnect рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЛ .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ .NET рдХреЗ рдЕрдкрдбреЗрдЯ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╣рдо рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдЬреЗрдВрдЯ рд╕реВрдБрдШрдиреЗ рдХрд╛ рдХреЛрдб рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЖрдкрдХреА рд╕рд╛рдЗрдЯ рдХреЗ рдХреЛрдб рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдЬреЗрдВрдЯ рд╕реВрдБрдШрдиреЗ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛ рдХрд┐ рдЖрдк ASP.NET рдпрд╛ ASP.NET Core рдХреЗ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдХрд┐рди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

ASP.NET 4.7.2 рдХреЗ рд▓рд┐рдП Microsoft.Owin рдХреЗ рд╕рд╛рде 4.1.0 рдПрдЬреЗрдВрдЯ рд╕реВрдБрдШрдиреЗ рдХреЛ ICookieManager рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ;

public class SameSiteCookieManager : ICookieManager { private readonly ICookieManager _innerManager; public SameSiteCookieManager() : this(new CookieManager()) { } public SameSiteCookieManager(ICookieManager innerManager) { _innerManager = innerManager; } public void AppendResponseCookie(IOwinContext context, string key, string value, CookieOptions options) { CheckSameSite(context, options); _innerManager.AppendResponseCookie(context, key, value, options); } public void DeleteCookie(IOwinContext context, string key, CookieOptions options) { CheckSameSite(context, options); _innerManager.DeleteCookie(context, key, options); } public string GetRequestCookie(IOwinContext context, string key) { return _innerManager.GetRequestCookie(context, key); } private void CheckSameSite(IOwinContext context, CookieOptions options) { if (DisallowsSameSiteNone(context) && options.SameSite == SameSiteMode.None) { options.SameSite = null; } } public static bool DisallowsSameSiteNone(IOwinContext context) { // TODO:    User Agent . var userAgent = context.Request.Headers["User-Agent"]; return userAgent.Contains("BrokenUserAgent") || userAgent.Contains("BrokenUserAgent2") } } 

рдФрд░ рдлрд┐рд░ рдирдП рдХреБрдХреА рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП OpenIdConnect рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ;

 app.UseOpenIdConnectAuthentication( new OpenIdConnectAuthenticationOptions { // тАж    тАж CookieManager = new SameSiteCookieManager(new SystemWebCookieManager()) }); 

SystemWebCookieManager рдХреЛ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рддрдп рд╕рдорд╕реИрдЯ .NET 4.7.2 рдпрд╛ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

ASP.NET Core рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреИрдЪ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдлрд┐рд░ рдХреБрдХреА рдкреЙрд▓рд┐рд╕реА рдореЗрдВ рдПрдЬреЗрдВрдЯ рд╕реВрдБрдШрдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред 3.1 рд╕реЗ рдкрд╣рд▓реЗ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, SameSiteMode.Unspecified (SameSiteMode) (- 1) рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред

 private void CheckSameSite(HttpContext httpContext, CookieOptions options) { if (options.SameSite > SameSiteMode.Unspecified) { var userAgent = httpContext.Request.Headers["User-Agent"].ToString(); // TODO:    User Agent . if (/* UserAgent doesn't support new behavior */) { //  .NET Core < 3.1  SameSite = -1 options.SameSite = SameSiteMode.Unspecified; } } } public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { options.MinimumSameSitePolicy = SameSiteMode.Unspecified; options.OnAppendCookie = cookieContext => CheckSameSite(cookieContext.Context, cookieContext.CookieOptions); options.OnDeleteCookie = cookieContext => CheckSameSite(cookieContext.Context, cookieContext.CookieOptions); }); } public void Configure(IApplicationBuilder app) { app.UseCookiePolicy(); // Before UseAuthentication or anything else that writes cookies. app.UseAuthentication(); // тАж } 

Azure рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЯреАрдо рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп, рд╣рдордиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪреЗрдХ рд╕рднреА рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдЬреЗрдВрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ Azure рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдирдП рдорд╛рди рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВред

 public static bool DisallowsSameSiteNone(string userAgent) {    //      iOS.   :    // - Safari  iOS 12  iPhone, iPod Touch, iPad    // - WkWebview  iOS 12  iPhone, iPod Touch, iPad    // - Chrome  iOS 12  iPhone, iPod Touch, iPad    if (userAgent.Contains("CPU iPhone OS 12") || userAgent.Contains("iPad; CPU OS 12"))    {        return true;    }    //     Mac OS X.   :    // - Safari  Mac OS X.    //  :    // - Chrome  Mac OS X    //        Mac OS.    if (userAgent.Contains("Macintosh; Intel Mac OS X 10_14") && userAgent.Contains("Version/") && userAgent.Contains("Safari"))    {        return true;    }    //    Chrome 50-69,      SameSite=None.    if (userAgent.Contains("Chrome/5") || userAgent.Contains("Chrome/6"))    {        return true;    }    return false; } 

рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреА рдпрд╣ рд╕реВрдЪреА рдХрд┐рд╕реА рдРрд╕реЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЖрдк рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдирд┐рдпрдорд┐рдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдЬреЗрдВрдЯ рдЕрдкрдбреЗрдЯ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдареАрдХ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

рдХреНрд░реЛрдо 80 рдлрд░рд╡рд░реА рдпрд╛ рдорд╛рд░реНрдЪ 2020 рдореЗрдВ рдирдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд░рдордг рдХреЗ рдХрд╛рд░рдг рд╣реИ ред рдпрджрд┐ рдЖрдк рдирдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреНрд░реЛрдорд┐рдпрдо рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВ ред

рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЙрд╕ рд╕рдордп рддрдХ рдЕрдкрдЧреНрд░реЗрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдм рдХреНрд░реЛрдо 2020 рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рдирдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк OpenIdConnect рд╕реНрдЯреНрд░реАрдо рдХреЛ рдПрдХ рдХреЛрдб рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ ASP.NET рдФрд░ ASP.NET рдХреЛрд░ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдирд╣реАрдВред рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЕрд╕реНрдерд╛рдпреА рдЙрдкрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

  • ASP.NET MVC рдФрд░ Microsoft.Owin рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк https://github.com/aspnet/AspNetKatana рдкрд░ Katana GitHub рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  • ASP.NET Core рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк https://github.com/aspnet/AspNetCore рдкрд░ ASP.NET Core GitHub рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  • .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕рдорд░реНрдерди рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, https://dotnet.microsoft.com/platform/support/policy/dotnet-framework рджреЗрдЦреЗрдВ

рд╣рдо рджреГрдврд╝рддрд╛ рд╕реЗ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ .NET рдХреЛрд░ рдХреЗ рдЕрджреНрдпрддрди рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рд╡реЗ рдирд╡рдВрдмрд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдХреНрд░реЛрдо рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдбреЗрдЯ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

Source: https://habr.com/ru/post/hi473168/


All Articles