IdentityServer3结合Hangfire及Cookies中间件实现授权 Idr3数据库Token过期管理

 GlobalConfiguration.Configuration.UseSqlServerStorage("Hangfire");
GlobalConfiguration.Configuration.UseLog4NetLogProvider();
app.UseHangfireDashboard("/lymtask", new DashboardOptions
{
AppPath = LYM.Unity.AppSetting.AppSettingsHelper.GetString("ClientUrl"),
Authorization = new[] { new LYMDashboardAuth() }
});
app.UseHangfireServer();
new HangfireTask().InvokeTask();

配置好Hangfire中间件,这里我用了Log4作为日志提供

值得注意的是Cookies中间件必须要在Hangfire之前,不然后面授权获取不到Cookies中间件中的授权信息

 app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "Cookies",
});
AppPath :界面上返回应用的地址
Authorization:自定义授权类
下面我们看下LYMDashboardAuth,是我自定义的一个授权类
这里又需要结合Owin中间件
LYMDashboardAuth 只需要去实现 Hangfire的 IDashboardAuthorizationFilter 接口
  public class LYMDashboardAuth : IDashboardAuthorizationFilter
{
public bool Authorize(DashboardContext context)
{
var ctx = new OwinContext(context.GetOwinEnvironment());
if (ctx.Authentication.User.Identity.IsAuthenticated)
{
var user = ctx.Authentication.User as ClaimsPrincipal; var username = user.Identities.FirstOrDefault().FindFirst(c => c.Type == "user_name").Value;
if (username == "Administrator")
{
return true;
}
return false; }
return false; }
}

这里我获取到了中间件中授权情况,我是只有帐号是Administrator用户才能访问Hangfire任务工作台

返回值为bool 是否允许授权 根据业务需要

下面说下 Token过期管理任务  new HangfireTask().InvokeTask();

public class HangfireTask
{
private readonly static log4net.ILog Logger = log4net.LogManager.GetLogger(typeof(HangfireTask));
private HttpClient client = new HttpClient();
private EntityFrameworkServiceOptions ef = new EntityFrameworkServiceOptions() { ConnectionString = "IdSvr3Config" };
/// <summary>
/// 这里执行任务计划
/// </summary>
public void InvokeTask()
{
#region LYM Add 清空服务器过期Token 20170824 每10分钟清理一次 RecurringJob.AddOrUpdate(() => ClearToken(), Cron.MinuteInterval()); #endregion #region LYM Add 20170824 每30分钟预热一下 RecurringJob.AddOrUpdate(() => PreHeatOAuth(), Cron.MinuteInterval()); #endregion
} /// <summary>
/// 清空授权服务器过期的token
/// </summary>
/// <returns></returns>
public async Task ClearToken()
{
using (var db = new OperationalDbContext(ef.ConnectionString, ef.Schema))
{
try
{
Logger.Info("Clearing tokens"); var query =
from token in db.Tokens
where token.Expiry < DateTimeOffset.UtcNow
select token; db.Tokens.RemoveRange(query); await db.SaveChangesAsync(); }
catch (Exception ex)
{
Logger.Error("Exception cleaning tokens", ex);
} } } /// <summary>
/// 预热授权
/// </summary>
/// <returns></returns>
public async Task PreHeatOAuth()
{ await client.GetAsync(LYM.Unity.AppSetting.AppSettingsHelper.GetString("ClientUrl"));
}

代码

写好任务类HangfireTask,里面写上清楚Token相关任务

 
 

一步一步学习IdentityServer3 (8)的更多相关文章

  1. 一步一步学习IdentityServer3 (1)

    学习之初: IdentityServer3我自己最开始了解到的就是做一个SSO单点登录,后面发现还有单独的认证服务功能,其实它还可以做APIs的访问控制,资源授权,另外还可以为提供第三方登录,其他的自 ...

  2. 一步一步学习IdentityServer3 (2)

    下面就来做一个例子:IdentityServer3服务端的配置 VS2015创建一个MVC项目 IdrOAuth 用来授权的认证的站点

  3. 一步一步学习IdentityServer3 (4)

    其实上述例子 很多都很找到 但是在实际生态环境中给例子有很多不一样的地方 比如自定已登录界面怎么做? 怎么访问自己的用户数据库实现登录? 怎么在接口中使用,在接口中又怎么实现与Idr3结合授权? 等等 ...

  4. 12.Linux软件安装 (一步一步学习大数据系列之 Linux)

    1.如何上传安装包到服务器 有三种方式: 1.1使用图形化工具,如: filezilla 如何使用FileZilla上传和下载文件 1.2使用 sftp 工具: 在 windows下使用CRT 软件 ...

  5. (转) 一步一步学习ASP.NET 5 (四)- ASP.NET MVC 6四大特性

    转发:微软MVP 卢建晖 的文章,希望对大家有帮助.原文:http://blog.csdn.net/kinfey/article/details/44459625 编者语 : 昨晚写好的文章居然csd ...

  6. (转) 一步一步学习ASP.NET 5 (二)- 通过命令行和sublime创建项目

    转发:微软MVP 卢建晖 的文章,希望对大家有帮助. 注:昨天转发之后很多朋友指出了vNext的命名问题,原文作者已经做出了修改,后面的标题都适用 asp.net 5这个名称. 编者语 : 昨天发了第 ...

  7. 一步一步学习SignalR进行实时通信_1_简单介绍

    一步一步学习SignalR进行实时通信\_1_简单介绍 SignalR 一步一步学习SignalR进行实时通信_1_简单介绍 前言 SignalR介绍 支持的平台 相关说明 OWIN 结束语 参考文献 ...

  8. 一步一步学习SignalR进行实时通信_8_案例2

    原文:一步一步学习SignalR进行实时通信_8_案例2 一步一步学习SignalR进行实时通信\_8_案例2 SignalR 一步一步学习SignalR进行实时通信_8_案例2 前言 配置Hub 建 ...

  9. 一步一步学习SignalR进行实时通信_9_托管在非Web应用程序

    原文:一步一步学习SignalR进行实时通信_9_托管在非Web应用程序 一步一步学习SignalR进行实时通信\_9_托管在非Web应用程序 一步一步学习SignalR进行实时通信_9_托管在非We ...

  10. 一步一步学习SignalR进行实时通信_7_非代理

    原文:一步一步学习SignalR进行实时通信_7_非代理 一步一步学习SignalR进行实时通信\_7_非代理 SignalR 一步一步学习SignalR进行实时通信_7_非代理 前言 代理与非代理 ...

随机推荐

  1. 在Kubernetes集群里安装微服务DevOps平台fabric8

    转载于https://blog.csdn.net/wzp1986/article/details/72128063?utm_source=itdadao&utm_medium=referral ...

  2. php生成word

    https://packagist.org/packages/phpoffice/phpword

  3. Python【读写Json文件】

    indent=10:缩进10个空格

  4. JAVA 线程池基本总结

    合理利用线程池能够带来三个好处. 第一:降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗. 第二:提高响应速度.当任务到达时,任务可以不需要等到线程创建就能立即执行. 第三:提高线程 ...

  5. Hadoop基础-Apache Avro串行化的与反串行化

    Hadoop基础-Apache Avro串行化的与反串行化 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Apache Avro简介 1>.Apache Avro的来源 ...

  6. 即时通信系统Openfire分析之三:ConnectionManager 连接管理

    Openfire是怎么实现连接请求的? XMPPServer.start()方法,完成Openfire的启动.但是,XMPPServer.start()方法中,并没有提及如何监听端口,那么Openfi ...

  7. IOS方形头像如何变成圆形

    方法一:直接使用UIView对应图层的cornerRadius self.layer.cornerRadius     = CGRectGetWidth(self.bounds)/2.f; self. ...

  8. 数据分析与展示---Matplotlib基本绘图函数

    一:基本绘图函数(这里介绍16个,还有许多其他的) 二:pyplot饼图plt.pie的绘制 三:pyplot直方图plt.hist的绘制 (一)修改第二个参数bins:代表直方图的个数,均分为多段, ...

  9. VsCode搭建Java开发环境(Spring Boot项目创建、运行、调试)

    源码地址:https://github.com/YANGKANG01/Spring-Boot-Demo 安装扩展 安装如下两个主要扩展即可,这两个扩展已关联java项目开发主要使用的maven.spr ...

  10. spring-data-redis,jedis和redis主从集成和遇到的问题

    Redis主从加哨兵的部署详见http://www.cnblogs.com/dupang/p/6414365.html spring-data-redis和jedis集成代码总体结构 代码地址http ...