我有一个asp.net核心托管的blazor应用程序,使用
builder.Services.AddIdentity<IdentityUser, IdentityRole>(options =>
{
// ...
}
.AddEntityFrameworkStores<ApplicationDbContext>()
和
builder.Services.AddIdentityServer()
.AddApiAuthorization<IdentityUser, ApplicationDbContext>()
我想添加一个特性,用户可以创建一个api令牌,并传递一个(可选的)到期日期和名称。创建的令牌应该是可撤销的。理想情况下,令牌仅限于api端点。
ServerSideSessions是否可行?由于IdentityServer正在轮替密钥,它是否能够验证1年前颁发的令牌?
这样做的原因是,我们有监控系统,监控来自那个api的数据。这些系统只能发出http调用,没有oauth集成。
编辑
我找到了https://github.com/DuendeSoftware/Samples/blob/main/IdentityServer/v6/PAT/src/IdentityServer/Pages/PAT/Index.cshtml.cs
似乎我可以使用可注入的ITokenService创建具有生存期的令牌。
我仍然没有找到一个默认的方式来撤销令牌。
1条答案
按热度按时间pkln4tw61#
我认为IdentityServer不是处理API令牌的正确工具。IdentityServer可以处理的是Oauth客户端及其机密,但这只允许支持Oauth的客户端创建可以直接在API端点上使用的令牌。服务器端会话只在服务器端存储用户数据,而不是在cookie中,因此这不是正确的选择。
在我看来,正确的处理方法是创建一个自定义的AuthenticationHandler,可能类似于以下内容:https://rmauro.dev/api-key-authentication-extending-the-native-implementation/
在那里,您可以访问存储API令牌的dbcontext,并可以验证它们。
然后,您可以使用AddPolicyScheme在api身份验证或自定义方案之间切换。
https://code-maze.com/dotnet-multiple-authentication-schemes/
大概是这样的: