我使用新的 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 ?如果我的方法有缺陷,解决这个问题的正确方法是什么?任何指导或更正将不胜感激。
Identity API 颁发的令牌不是 JWT。它是专有的不透明令牌,您无法在客户端检查它。 该令牌适用于第一方身份验证/授权场景(客户端、服务器和身份验证均在您的控制之下),因此安全上下文与第三方场景略有不同