我可以使用 AddBearerToken 在 .NET 8 Web API 中设置具有身份 API 端点的 IssuerSigningKey 吗?

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

我使用新的 Identity API 端点功能开发了一个 Web API。

在我的 Next.js 前端中,我实现了受保护的页面,只有经过身份验证的用户才能访问。为了使用户能够访问这些受保护的页面,我创建了一个 verifyAuth 函数,该函数使用密钥验证令牌:

export const verifyAuth = async (token: string) => {
  console.log("Token: ", token);

  try {
    const verified = await jwtVerify(
      token,
      new TextEncoder().encode(getJwtSecretKey())
    );

    return verified.payload as UserJwtPayload;
  } catch (error: any) {
    throw new Error("Your token has expired. Please login again.");
  }
};

但要做到这一点,我必须首先使用我的 Web api 中的密钥对令牌进行签名。 如果您不使用身份 API 端点,则签名过程很简单,如此处中的配置身份和 JWT部分所示,您可以在其中设置IssuerSigningKey

对于使用身份 API 端点的用户,需要采用不同的方法。您不需要在program.cs中调用AddJwtBearer,而是需要使用AddBearerToken:

// Authentication
builder.Services.AddAuthentication().AddBearerToken();

// Authorization with Identity endpoints
builder.Services.AddAuthorizationBuilder();
builder.Services.AddIdentityApiEndpoints<IdentityUser>().AddEntityFrameworkStores<DatabaseContext>();

AddBearerToken 方法可以接受选项,我在 Microsoft 文档中偶然发现了 BearerTokenProtector 选项。但是,我不确定如何在这种情况下设置签名密钥。

所以,我的问题是,在这种情况下我应该在哪里设置 IssuerSigningKey ?如果我的方法有缺陷,解决这个问题的正确方法是什么?任何指导或更正将不胜感激。

c# .net asp.net-identity bearer-token .net-8.0
1个回答
0
投票

Identity API 颁发的令牌不是 JWT。它是专有的不透明令牌,您无法在客户端检查它。 该令牌适用于第一方身份验证/授权场景(客户端、服务器和身份验证均在您的控制之下),因此安全上下文与第三方场景略有不同

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