yuzd / Hangfire.HttpJob

httpjob for Hangfire,restful api for Hangfire,job调度与业务分离
https://github.com/yuzd/Hangfire.HttpJob/wiki
MIT License
633 stars 186 forks source link

定时任务调用api是否支持token? #64

Closed qiang999 closed 4 years ago

qiang999 commented 4 years ago

有些系统接口不是采用user password的验证形式,而是token信息进行授权。 如:一些集成了IdentityServer4的系统,需要先去请求token信息,token内包含了接口授权信息。 Hangfire.HttpJob是否能处理这类接口,谢谢!

yuzd commented 4 years ago

你可以参考试试看: 你准备2个接口: 一个获取token的接口 A 另外一个是真正执行的接口 B

然后利用callback功能 把A接口返回的东西 在传给B 接口

https://github.com/yuzd/Hangfire.HttpJob/wiki/04.Callback%E5%8A%9F%E8%83%BD%7CEL%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%9D%A5%E5%8A%A8%E6%80%81%E6%96%AD%E8%A8%80%E6%89%A7%E8%A1%8C%E6%88%90%E5%8A%9F%E8%BF%98%E6%98%AF%E5%A4%B1%E8%B4%A5

我没有试过。因为我的接口都是内网的。如果需要token验证的话 也是一个固定token。 动态的token 没有搞过,不过我刚才说的方案理论上应该可行

qiang999 commented 4 years ago

我试了一下,理论上应该可以 但我父job返回的结果是个json image 请教一下,我的子job如何获取里面access_token的值 我设置为#{#parent.access_token} #{#request.access_token} #request.access_token均无法获取值 显示此对象为空 image 应该是没有成功拿到父job的返回值 谢谢

yuzd commented 4 years ago

我看看

ghost commented 4 years ago

这个事好像挺难做的,拿 ids4 来说还好些, 可以用 ClientCredentials 方式,授权服务器设定好 scopes 和 apiresources, 任务调度系统通过 clientid 和 clientsecret 认证获取 token

不过要是采用jwt中间件认证方式的系统来说,获取token基本都需要username和password或者以旧换新,暴漏username和password给任务调度系统不安全,固定token也不可行,不安全而且基本都有过期时间。针对这种情况,倒是可以在后台系统中单独给任务调度系统开一个获取token的不需认证地址,给token加上claim,对于后台系统的任务地址都需要有这个claim认证或者后台系统的非任务地址这个claim都不能访问之类的。

感觉最简单的方式就是后台系统中的任务地址都允许匿名访问,也可能想多了。。。

yuzd commented 4 years ago

嗯 我也觉得不要搞复杂了。如果你想要调度的接口 有这种认证方式的话。我还不如 搞一个桥接接口 呢

另外 你上面反馈的 parent 占位符 和预期不符的问题 我修复了。 之前是parent是返回体string 已在新版优化了 wiki也更新了

EL表达式内置变量 说明
#resultBody 是返回体的 string
#result 是返回体的 json体(根据返回体的 string转的,如果上面是非json格式的那就不能使用这个变量了)
#StatusCode 是Response的状态code 例如 200 是ok 404 是not found 。。。
#parentBody 是上一级返回体的string
#parent 是上一级返回体的 json体(根据上一级返回体string转的)