Fork me on GitHub

OpenIddict实现一套自己的管理功能

1、利用 IOpenIddictApplicationManager 、IOpenIddictAuthorizationManager 、IOpenIddictScopeManager 、IOpenIddictTokenManager 几个基础操作类完成基础管理,这里我做了一个分页所以 还需要使用上下文对象 OpenIdDbContext来实现分页

这里需要使用:

 var query = _openIdDbContext.Set<OpenIddictEntityFrameworkCoreApplication>().AsQueryable(); 来处理分页查询 IQueryable

 

2、新增表单页面根据表单内容结合基础设置的常量类型和实际业务需要的东西来确认需要字段,这里处理Scope中的内容需要将自己定义的资源给组合进去

3、处理管理Scope范围,这里就称作权限范围码,同时需要定义 权限范围码对应的资源名称,资源名称需要配置到我们的API接口中

options.SetIssuer(Configuration.GetSection("OpenIddictConfig:Issuer").Value);
options.AddAudiences(Configuration.GetSection("OpenIddictConfig:Audiences").Value.Split(" ", StringSplitOptions.RemoveEmptyEntries));

options.UseIntrospection().SetClientId(Configuration.GetSection("OpenIddictConfig:ClientId").Value).SetClientSecret(Configuration.GetSection("OpenIddictConfig:ClientSecret").Value);

资源会根据请求客户端请求的Scope范围对应资源获取到

4、令牌管理这里没用做登录名称的处理,只处理了sub标识,在交互内省的方式下可以撤销令牌,同时可以看到令牌请求授权范围

 

 5、授权管理处理用户授权的信息,可以撤销授权,撤销授权后撤销令牌信息,用户登录信息失效,记录了用户使用某某客户端登录获取了的授权信息,已经授权过的,下次登录获取不会产生新的授权信息,这里需要结合客户端中的ConsentType来确认

如:配置explicit 需要授权同意,授权信息提示,下次登录不会提示,但是当移除授权信息后会重新提示,这就是授权管理,可以移除某些用户的授权信息,用户也可以查看自己在授权那些客户端,自己可以移除(类似微信登录授权管理)

 

6、使用定时任务定期清理过期的token

自定义Job任务

public class TokenCleanupJob : IJob
    {

        private readonly IOpenIddictTokenManager _tokenManager;

        public TokenCleanupJob(IOpenIddictTokenManager tokenManager)
        {
            _tokenManager = tokenManager;
        }
        public async Task Execute(IJobExecutionContext context)
        {
            await _tokenManager.PruneAsync(DateTimeOffset.UtcNow);
        }
    }

然后在服务中添加这样的设置

.AddQuartz(options =>
{
    options.UseMicrosoftDependencyInjectionJobFactory();
    options.UseSimpleTypeLoader();
    options.UseInMemoryStore();
    options.AddJob<TokenCleanupJob>(configure => {

        configure.WithIdentity("cleartoken").WithDescription("清理Token");
    });
    options.AddTrigger(configure =>
    {
        //每分钟清理一次,按需求 此为测试
       configure.WithIdentity("cleartoken").WithDescription("清理Token").WithCronSchedule("0 0/1 * * * ?").ForJob("cleartoken");
    

    });
  
})

 

posted @ 2023-08-25 15:00  龙码精神  阅读(1035)  评论(1编辑  收藏  举报