我遇到以下情况,非常感谢任何帮助:
我在用户界面(Blazor 服务器应用程序)中使用 JSON Web 令牌 (jwtbearer) 进行身份验证和授权,以访问我的 Web API (Asp.net core 5.0)。
我尝试从通过 UserId 过滤的 API 返回数据(在创建令牌时我也将其添加为 NameIdentifier)。ClaimsPrincipal然后我注意到,点击控制器时返回的声明ControllerBase.User与我的令牌不同。
我有两项NameIdentifier索赔,但缺少“sub”。相反,看起来 sub 已更改为第二个NameIdentifier。
但是,当我随请求发送时,令牌的有效负载看起来是正确的。这是我的令牌的有效负载:
{
"sub": "admin@caliprog.com",
"jti": "15c23576-9f5b-4f81-a985-ab236830c7b5",
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier": "9b437d6c-8fb8-455d-87f5-986d36b26dcf",
"http://schemas.microsoft.com/ws/2008/06/identity/claims/role": "Administrator",
"exp": 1625472724,
"iss": "test.com",
"aud": "test.com"
}
Run Code Online (Sandbox Code Playgroud)
显然我在某个地方犯了错误,但我不知道错误出在哪里。如果有人能指出我的方向,那就太好了。我很高兴自己做更多研究,但我不知道从哪里开始。
以下是一些可能相关的代码部分,如果我遗漏了任何重要的内容,请告诉我:
我的 GetRequest(它有效,但我很想替换this.User.Claims.ToList()[2].Value为var userId = this.User.FindFirst(ClaimTypes.NameIdentifier).Value;)
[HttpGet]
public async Task<IActionResult> GetWorkouts()
{
try
{
_logger.LogInfo(LogMessages.AttemptMsg, ControllerContext);
var userId = this.User.Claims.ToList()[2].Value;
var workouts …Run Code Online (Sandbox Code Playgroud)