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. SMO详解

    转自:简书https://www.jianshu.com/p/55458caf0814 SVM通常用对偶问题来求解,这样的好处有两个:1.变量只有N个(N为训练集中的样本个数),原始问题中的变量数量与 ...

  2. windows下用wubi快速安装ubuntu

    由于开发需要,我们可能要用到ubuntu,然而又不能完全抛弃windows,于是双系统是个不错选择. wubi是一个在windows下快速安装ubuntu双系统的工具,它包含在ubuntu 12及以前 ...

  3. JS中的getter与setter

    一.什么是getter和setter getter 是一种获得属性值的方法,setter是一种设置属性值的方法 getter负责查询值,它不带任何参数,setter则负责设置键值,值是以参数的形式传递 ...

  4. vue 脚手架使用

    1. npm指令 vue init 模板类型   项目名称 如: vue init webpack-simple mydemo 2.进入刚才生产的 文件夹 mydemo cd mydemo 3.初始化 ...

  5. bzoj千题计划106:bzoj1014 [JSOI2008]火星人prefix

    http://www.lydsy.com/JudgeOnline/problem.php?id=1014 两个后缀的最长公共前缀:二分+hash 带修改带插入:splay维护 #include< ...

  6. An Insight to References in C++

    [An Insight to References in C++] 引用的本质是常指针.占用的内存和指针一样. 参考:http://www.codeproject.com/Articles/13363 ...

  7. Web开发中的18个关键性错误

    前几年,我有机会能参与一些有趣的项目,并且独立完成开发.升级.重构以及新功能的开发等工作. 本文总结了一些PHP程序员在Web开发中经常 忽略的关键错误,尤其是在处理中大型的项目上问题更为突出.典型的 ...

  8. 【AtCoder】AGC022 F - Leftmost Ball 计数DP

    [题目]F - Leftmost Ball [题意]给定n种颜色的球各k个,每次以任意顺序排列所有球并将每种颜色最左端的球染成颜色0,求有多少种不同的颜色排列.n,k<=2000. [算法]计数 ...

  9. 安装Win8引起Ubuntu启动项丢失的恢复过程

    画电路图的时候手痒,于是将之前做好的Win8PE拿出来装着玩儿.至于Win8的pE很好做,用UltraISO将Win8 的镜像用制作硬盘镜像的方法烧进U盘就行了. Win8的安装过程也很简单.安装前为 ...

  10. UITableView--文档版

    CHENYILONG Blog UITableView Fullscreen   UITableView技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http: ...