OWIN 使用什么机制来确定用户在阅读他们的声明之前是否已通过身份验证?

What mechanism does OWIN use to determine that a user is authenticated before reading their claims?

我已经为 ASP.Net MVC 启动了示例项目,它提供针对 Active Directory 的单点登录,并且正在使用 this Microsoft tutorial 作为参考。

一旦用户点击登录并重定向到其组织的登录页面,返回到 Web 应用程序后,以下代码将验证他们是否已通过身份验证,并成功读取他们的声明:

using Microsoft.Owin.Security;
using Microsoft.Owin.Security.Cookies;
using Microsoft.Owin.Security.OpenIdConnect;
using Owin;

@if (Request.IsAuthenticated)
{
    <dl>
        @foreach (var claim in System.Security.Claims.ClaimsPrincipal.Current.Claims)
        {
            <text>
                <dt>@claim.Type</dt>
                <dd>@claim.Value</dd>
            </text>
        }
    </dl>
}

在幕后,什么真正构成了 Request.IsAuthenticated 的真实价值?
声明的存在本质上是存在的,还是在阅读声明之前使用特定值来提供结果?

该教程要求您将身份验证中间件添加到您的请求管道中。在这种情况下,您要添加 UseCookieAuthenticationUseOpenIdConnectAuthentication 来注册身份验证中间件。这些以及您可能添加的任何其他内容(例如 JWT 不记名令牌身份验证)使用它们自己的内部机制来解析请求并将声明身份分配给您的请求上下文。例如,cookie 身份验证将查找代表持续会话的 cookie,并将解密并解析其详细信息作为声明身份。 IsAuthenticated 字面上只是 returns 如果一个或多个身份可用则为真。

更多细节当然可以深入源码。例如,OWIN 的 cookie 身份验证中间件位于此处:https://github.com/aspnet/AspNetKatana/tree/dev/src/Microsoft.Owin.Security.Cookies