Как теоретически работают файлы cookie аутентификации ASP.NET Core 5 OpenIdConnect?C#

Место общения программистов C#
Ответить
Anonymous
 Как теоретически работают файлы cookie аутентификации ASP.NET Core 5 OpenIdConnect?

Сообщение Anonymous »

Мы пытаемся понять, как файлы cookie аутентификации (ASP.NET Core 5.0 — Microsoft.AspNetCore.Authentication.OpenIdConnect версии 5.0.11) работают с потоком кода авторизации без PKCE.
Процесс аутентификации
Процесс аутентификации выглядит следующим образом: вход в систему во внешнем интерфейсе перенаправляется на конечную точку входа в систему. AuthController и запускает процесс OpenId Connect. Таким образом, вы проходите аутентификацию поставщиком удостоверений и файлы cookie устанавливаются для пользователя. Они отправляются при каждом вызове API для проверки подлинности запроса.
В процессе создаются 3 файла cookie:
Cookie #1 :
  • Имя = .AspNetCore.Cookies
  • Значение = chunks-2
    < /ul>
    Печенье №2:
  • Имя = .AspNetCore.CookiesC1
  • Значение = CfDJ8GRK-GHfascFTvp0o_E7oKZU-6GOAbUGCPHZZPfewEv12PmKgr46gfeTQC351e-Jnxq8SxzjJEgboIedIPCO11Q […]
Файл cookie №3:
  • Имя = .AspNetCore.CookiesC2
    < li>Значение = 8G86qN27NOS2Z-75XqY34d-ID1nOELpPaHUIe2EkFZMmfjrYSKA2JaU30p4Ozh8RyxZXTpFCRV8
Вопросы

[*] Как эти файлы cookie .AspNetCore используются для аутентификация?
[*]Как генерируются имена и шифруются значения?
[*]Что содержат эти файлы cookie?

Мы пытались расшифровать файл cookie (Как вручную расшифровать файл cookie аутентификации ASP.NET Core?), чтобы понять, как он работает, но у нас это не сработало.
К сожалению, мы пока не нашли ответа на вопрос, как генерируется файл cookie (с именем и ценность) в теории.
Надеюсь, вопросы были понятны, и буду признателен, если кто-нибудь сможет на них ответить.
Фрагменты кода для лучшего понимания . Надеюсь :)
AuthController:
// https://auth0.com/blog/backend-for-fron ... nd-dotnet/
public class AuthController : Controller
{
public ActionResult Login(string returnUrl = "/login")
{
return new ChallengeResult(OpenIdConnectDefaults.AuthenticationScheme, new AuthenticationProperties() { RedirectUri = returnUrl });
}

[Authorize]
public async Task Logout()
{
await HttpContext.SignOutAsync();

return new SignOutResult(OpenIdConnectDefaults.AuthenticationScheme, new AuthenticationProperties
{
//RedirectUri = Url.Action("Index", "Home")
RedirectUri = "/logout"
});
}

//[Authorize]
public ActionResult GetUser()
{
var jsonReturn = new Dictionary();

if (User != null && User.Identity.IsAuthenticated)
{
jsonReturn.Add("isAuthenticated", "true");

foreach (var claim in ((ClaimsIdentity)this.User.Identity).Claims)
{
jsonReturn.Add(claim.Type, claim.Value);
}

return Json(JsonConvert.SerializeObject(jsonReturn));
}

jsonReturn.Add("isAuthenticated", "false");
return Json(JsonConvert.SerializeObject(jsonReturn));
}
}

Запуск:
public void ConfigureServices(IServiceCollection services)
{
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();

services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie(o =>
{
o.Cookie.SecurePolicy = CookieSecurePolicy.Always;
o.Cookie.SameSite = SameSiteMode.Strict;
o.Cookie.HttpOnly = true;
})
.AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options => ConfigureOpenIdConnect(options));
}

private void ConfigureOpenIdConnect(OpenIdConnectOptions options)
{
options.Authority = ;
options.ClientId = "";
options.ClientSecret = "";

options.ResponseMode = OpenIdConnectResponseMode.FormPost;
options.Scope.Clear();
options.Scope.Add("openid");
options.Scope.Add("profile");
options.Scope.Add("offline_access");

options.CallbackPath = new PathString("/callback");
options.SaveTokens = true;
options.UseTokenLifetime = false;
}


Подробнее здесь: https://stackoverflow.com/questions/702 ... -in-theory
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»