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. 五、Linux学习之文件搜索命令

    一.文件搜索命令locate locate 文件名 在后台数据库中按文件名搜索,搜索速度最快 /var/lib/mlocate #locate命令所搜索的后台数据库(数据库不会实时刷新,所以新建的文件 ...

  2. OpenStack 认证服务 KeyStone部署(三)

    Keystone 介绍 Keystone作用: 用户与认证:用户权限与用户行为跟踪: 服务目录:提供一个服务目录,包括所有服务项和相关Api的断点 SOA相关知识 Keystone主要两大功能用户认证 ...

  3. Spring知识总结

    一.Spring简述    Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架,Spring致力于提供一种方法管理你的业务对象,Spring的主要目的是使JavaE ...

  4. pom.xml错误:org.codehaus.plexus.archiver.jar.Manifest.write(java.io.PrintWriter)的解决方法

    pom.xml文件在添加了新的依赖后,一直报:org.codehaus.plexus.archiver.jar.Manifest.write(java.io.PrintWriter)的错误,Maven ...

  5. MVVM实战

    1.层次依赖 - (UIViewController *)createInitialViewController { self.viewModelServices = [RWTViewModelSer ...

  6. Linux查看服务器公网ip的方法

    在解决网络问题时,需要查看本机的出口公网IP信息,有如下两个方法: curl ifconfig.me 在linux系统中输入上述的命令,可以查看到本机连接的公网信息: 如果该命令无效,可以使用下面一个 ...

  7. js封装Cookie操作

    var CookieUtil = { // 设置cookie set : function (name, value, expires, domain, path, secure) { var coo ...

  8. 你需要了解 Windows Phone 8.1 的11件事

    微软已经发布了其新一代手机操作系统 Windows Phone 8.1,拥有一些新的特性.从本质上来说,微软此次的大修让 Windows Phone 更接近 Android 和 iOS,对于使用体验的 ...

  9. 20155202 2016-2017-2 《Java程序设计》第7周学习总结

    20155202 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 世界协调时间:UTC 采用 闰秒修正 Epoch为某特定时代开始,时间轴上某一瞬间 Unix ...

  10. 网摘关于BarCodeControl控件

    简介 BarCodeControl是一个用户制作条形码的控件. MicrosoftBarcodeControl9.0是可以在MicrosoftOfficeAccess窗体和报表中显示条码符号的Acti ...