.NET 身份/登录不返回令牌

问题描述 投票:0回答:1

注意:这是我第一次使用 .NET 身份,我凭感觉行事。

我正在构建一个具有 .NET 标识的项目。我在项目的早期定义了我的端点,我有身份工作,返回不记名令牌,并使用 Swagger 成功验证和访问安全端点。

在某个时刻,

/login
端点停止返回令牌,而只返回
OK
状态。所以我开始调试。当我单步执行
/login
中的
Microsoft.AspNetCore.Routing.IdentityApiEndpointRouteBuilderExtensions.MapIdentityApi<>()
端点时,我注意到 /login 实际上并未返回任何数据。只有一条评论写着:
The signInManager already produced the needed response in the form of a cookie or bearer token.
这对我来说毫无意义,但显然,它有效,因为我在某个时候有这个工作。我认为我的配置中有一些东西扰乱了
signInManager
返回数据的能力,但是,它确实做到了。

我尝试过单步执行

signInManager
,因为它尝试登录用户,但有数千行代码和代码可能采用的许多分支。我不知道从哪里开始。我查看了我的配置设置,但我真的不知道这些东西的一半是做什么的。我已经将我的设置与其他人所做的进行了比较,但每个人的做法似乎都不同,所以我无法分辨什么是标准的,什么是这家伙奇怪的设计选择,什么是不相关的。

这是我的构建器方法的副本,以便您可以查看我的配置https://pastebin.com/2z3Y5Vbj

怎么了?为什么

/login
不返回令牌?

asp.net-core asp.net-identity .net-8.0
1个回答
0
投票

我认为问题出在方案名称上。将“asp.net core 身份”与端点一起使用时。登录时有两种工作模式。

模式 1 正在为方案

CookieAuthenticationDefaults.AuthenticationScheme
生成 cookie(也称为“cookie”)。
模式 2 响应方案为
IdentityConstants.BearerScheme
的熊代币(也称为“Identity.Bearer”)。

正如你所说,使用 ASP.NET Core Identity 的方法有很多,但也存在一些差异。

  1. AddIdentityCore<IdentityUser>()
    :您必须手动
    AddCookie()
    AddBearer(IdentityConstants.BearerScheme)
  2. AddIdentity<IdentityUser,IdentityRole>()
    :包含
    AddCookie()
  3. AddDefaultIdentity<IdentityUser>()
    :包含
    AddCookie()
  4. AddIdentityApiEndpoints
    :包含
    AddCookie()
    AddBearer(IdentityConstants.BearerScheme)

所以在检查你的代码后,你用 jwt 方案名称搞乱了 cookie 方案,这不应该正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.