C# ASP.NET核心3.1+;打开ID连接+;广告没有';t将id令牌持久化到User.Identity中
我正在尝试使用我们公司的Azure AD实现开放Id身份验证,为此,我们使用以下Microsoft指南: 虽然示例项目运行良好,但将相同的方法迁移到我们的网站并不可行。单击“登录”按钮后,用户将正确重定向到外部身份验证(Azure AD),登录后,外部身份验证(Azure AD)将用户重定向回我们的网站。此时一切看起来都不错,如果我们检查对我们网站的外部身份验证回调请求,我们可以看到控制台日志中正确返回了id令牌;但是,这些信息似乎都没有传播/保存到C# ASP.NET核心3.1+;打开ID连接+;广告没有';t将id令牌持久化到User.Identity中,c#,asp.net-core,authentication,azure-active-directory,openid-connect,C#,Asp.net Core,Authentication,Azure Active Directory,Openid Connect,我正在尝试使用我们公司的Azure AD实现开放Id身份验证,为此,我们使用以下Microsoft指南: 虽然示例项目运行良好,但将相同的方法迁移到我们的网站并不可行。单击“登录”按钮后,用户将正确重定向到外部身份验证(Azure AD),登录后,外部身份验证(Azure AD)将用户重定向回我们的网站。此时一切看起来都不错,如果我们检查对我们网站的外部身份验证回调请求,我们可以看到控制台日志中正确返回了id令牌;但是,这些信息似乎都没有传播/保存到User.Identity对象,这意味着如果我
User.Identity
对象,这意味着如果我们在_LoginPartial.cshtml中使用User.Identity.IsAuthenticated
,则它始终为空
我怀疑,由于我们的解决方案是在Kentico CMS下构建的,Kentico有自己的Kentico身份验证处理程序,因此我猜它正在清除/覆盖我们的开放id身份验证
是否有办法清除所有已注册的身份验证处理程序?或者其他解决方法?
下面是示例代码,您可以了解我们的实现:
Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
. . .
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"));
. . .
services.AddRazorPages()
.AddMicrosoftIdentityUI();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
. . .
app.UseAuthentication();
app.UseAuthorization();
. . .
}
appSettings.json:
. . .
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "[Enter the domain of your tenant, e.g. contoso.onmicrosoft.com]",
"ClientId": "Enter_the_Application_Id_here",
"TenantId": "Enter_the_Tenant _Id_here",
"CallbackPath": "/signin-oidc"
}
. . .
_LoginPartial.cshtml
<ul class="navbar-nav">
@if (User.Identity.IsAuthenticated)
{
<li class="nav-item">
<span class="navbar-text text-dark">Hello @User.Identity.Name!</span>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a>
</li>
}
else
{
<li class="nav-item">
<a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignIn">Sign in</a>
</li>
}
</ul>
@if(User.Identity.IsAuthenticated)
{
-
你好@User.Identity.Name!
-
退出
}
其他的
{
-
登录
}
我不确定是什么导致了您的问题,因为我无法理解什么是“传播到User.Identity”和“检查用户是否经过身份验证”。在我看来,在集成azure ad之后,我们需要使用访问令牌和id令牌来获取用户信息。正如示例代码要求您设置重定向url一样,登录模块独立于您的项目。Hi@Tiny wa,因此azure ad日志记录过程似乎运行良好,我们甚至看到id令牌被返回,下一步是在登录部分页面上检查User.Identity.IsAuthenticated属性,以检查用户是否已登录。因此,在这一点上,我的期望是,这个对象将拥有从id令牌返回的所有用户信息,这是不会发生的,user.Identity对象根本没有任何信息。