在阅读用户的声明之前,OWIN使用哪种机制来确定用户已通过身份验证?

问题描述

我已经启动了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只会返回true。

有关更多详细信息,您当然可以深入了解源代码。例如,OWIN的cookie身份验证中间件位于以下位置:https://github.com/aspnet/AspNetKatana/tree/dev/src/Microsoft.Owin.Security.Cookies