如果要在自己的系统中操作jira的api完成这些单据的创建、审批等操作,就不得不要先完成jira的第三方授权,才能在第三方系统去做这些jira的操作。
  1. 首先必须在jira系统配置客户端的相关信息,须配置几个指标:

    • 客户端访问地址需要先配置
    • Consumer key:客户端关键字(可自定义)
    • Consumer name:客户端名称(接入系统的名称)
    • Public key:公钥(自己生成公钥/私钥对)
    • Callback url:回调地址,用于jira验证登录成功之后回调到客户端系统,并传入准入令牌等信息,客户端再次请求获取access token,并将access token保存在客户端,后面再次请求jira的api就可以携带accesstoken进行请求
  2. 生成 RSA 公钥/私钥对

    在macos或者linux终端中,运行以下 openssl 命令。

    您可以在文件系统的任何位置执行此操作,但请注意,这是创建文件的位置。

生成 1024 位私钥:

openssl genrsa -out jira_privatekey.pem 1024

创建 X509 证书:

openssl req -newkey rsa:1024 -x509 -key jira_privatekey.pem -out jira_publickey.cer -days 365

将私钥(PKCS8格式)提取到 jira_privatekey.pcks8 文件中:

openssl pkcs8 -topk8 -nocrypt -in jira_privatekey.pem -out jira_privatekey.pcks8

将证书中的公钥提取到 jira_publickey.pem文件中:

openssl x509 -pubkey -noout -in jira_publickey.cer  > jira_publickey.pem
  • 最终将jira_privatekey.pcks8文件中的私钥字符串考出来,放在客户端程序。
  • 将jira_publickey.pem文件中的公钥字符串考出来,放在jira公钥配置的栏目。
  • 参考文档:Oauth授权流程
  1. 配置好jira的四个配置以后,来到客户端程序,需要在你的客户端系统中配置并保存好两个对应配置,后面需要基于此两个配置来发起授权请求:

    • consumerKey 客户端关键字(和jira配置的一致)
    • privateKey 私钥,上面生成的私钥/公钥对
  2. 客户端的后端程序提供接口,获取jira的登陆校验地址,此时后端程序中就需要用到consumerKey和privateKey两个参数,最终此后端接口返回一个授权登录的url给前端服务,由前端页面打开链接窗口。
  3. 在前端服务器页面打开的授权登录窗口中,输入jira登录密码,完成授权,此时之前配置在jira的回调地址,会把授权完成产生的oauth_token和oauth_verifier回调到客户端的后端接口程序。
  4. 客户端后端的回调方法再次根据获得的oauth_token和oauth_verifier,请求jira换取accesstoken令牌,获得令牌后并保存在服务端数据库。
  5. 完成此一系列操作后,最终此回调方法可以返回一个关闭窗口命令的字符串给前端,让前端关掉此前的授权窗口。
  6. 所有客户端后端服务需要接口有两个:

获取jira授权地址接口

@ApiOperation(value = "返回jira登录验证页面地址", notes = "返回jira登录验证页面地址", httpMethod = "GET")
@GetMapping(value = ["/jiraLogin"])
fun jiraLogin(): Map<String, String> {
// 请求jira认证
try {
return mapOf("redirectUrl" to jiraApiService.getAuthorizeUrl())
} catch (e: HttpResponseException) {
Log.get().error("""JIRA 登陆失败: ${e.message}""")
throw Exception("JIRA 登陆失败!!")
}
}

回调接口——在获取授权token和授权码之后调用回调函数换取accessToken

@ApiOperation(value = "jira回调地址完成授权,保存accesstoken", notes = "jira回调地址完成授权,保存accesstoken", httpMethod = "GET")
@GetMapping(value = ["/oauth"])
fun jiraLoginCallback(
@RequestParam(value = "oauth_token") requestToken: String,
@RequestParam(value = "oauth_verifier") secret: String,
request: HttpServletRequest,
response: HttpServletResponse
) {
try {
val token = jiraApiService.requestJiraAccessToken(requestToken, secret)
jiraApiService.saveAccessToken(token)
} catch (e: Exception) {
Log.get().error("JIRA认证失败: ${e.message}")
} finally {
response.addHeader("Content-Type", "text/html; charset=utf-8")
val out = response.writer
out.write("""<script language="javascript"> setTimeout("window.close()", 500); </script>""")
out.close()
}
}
  1. 流程参考地址:授权完整流程,可下载demo

接入jira OAuth权限流程的更多相关文章

  1. 在Web应用中接入微信支付的流程之极简清晰版

    在Web应用中接入微信支付的流程之极简清晰版 背景: 在Web应用中接入微信支付,我以为只是调用几个API稍作调试即可. 没想到微信的API和官方文档里隐坑无数,致我抱着怀疑人生的心情悲愤踩遍了丫们布 ...

  2. 在Web应用中接入微信支付的流程之极简清晰版 (转)

    在Web应用中接入微信支付的流程之极简清晰版 背景: 在Web应用中接入微信支付,我以为只是调用几个API稍作调试即可. 没想到微信的API和官方文档里隐坑无数,致我抱着怀疑人生的心情悲愤踩遍了丫们布 ...

  3. Fine报表权限流程分析记录

    Fine报表权限流程分析记录 URL访问三种类型的报表:第一个:BI报表 例如: http://192.25.103.250:37799/WebReport/ReportServer?op=fr_bi ...

  4. rest_framework 权限流程

    权限流程 权限流程与认证流程非常相似,只是后续操作稍有不同 当用户访问是 首先执行dispatch函数,当执行当第二部时: #2.处理版本信息 处理认证信息 处理权限信息 对用户的访问频率进行限制 s ...

  5. jira默认是jira_user用户组的用户有登录jira的权限

    场景描述: 今天给jira新建了几个用户组,看着英文的jira_user和jira_developer有点多余,所以就给删掉了.然后后面新建了开发人员和测试人员用户组,进行了人员分配和项目分配,可是突 ...

  6. jira的插件开发流程实践

    怎么开头呢,由于自己比较懒,博客一直不怎么弄,以后克己一点,多传点自己遇到的问题和经历上来,供自己以后记忆,也供需要的小伙伴少走点弯路吧 最近公司项目需要竞标一个运维项目,甲方给予了既定的几种比较常用 ...

  7. 在 Confluence 6 中的 Jira 高级权限

    启用嵌套用户组(Enable Nested Groups) 为嵌套组启用或禁用支持. 在启用嵌套用户组之前,你需要检查你在 JIRA 服务器中的嵌套用户组是否启用了.当嵌套用户组启用成功后,你可以将一 ...

  8. 三、django rest_framework源码之权限流程剖析

    1 绪言 上一篇中分析了认证部分的源码,认证后的下一个环节就是权限判定了.事实上,权限判定肯定要与认证联合使用才行,因为认证部分不会对请求进行禁止或者是允许,而只是根据请求中用户信息进行用户身份判断, ...

  9. [android开发篇]使用系统权限流程

    1 声明权限https://developer.android.com/training/permissions/declaring.html 每款 Android 应用都在访问受限的沙盒中运行.如果 ...

  10. JIra配置权限方案

    目录: 添加用户 添加用户组 将用户分配到不同的组中 创建项目权限方案 配置项目采用的权限方案 1. 添加用户 1)使用admin权限的账户登录后,点击右上角的配置,选择system 2)在打开的页面 ...

随机推荐

  1. Go语言核心36讲35

    到目前为止,我们已经一起学习了Go语言标准库中最重要的那几个同步工具,这包括非常经典的互斥锁.读写锁.条件变量和原子操作,以及Go语言特有的几个同步工具: sync/atomic.Value: syn ...

  2. Kubernetes IPVS和IPTABLES

    个人名片: 对人间的热爱与歌颂,可抵岁月冗长 Github‍:念舒_C.ying CSDN主页️:念舒_C.ying 个人博客 :念舒_C.ying Kubernetes IPVS和IPTABLES ...

  3. python读入中文文本编码错误

    python读入中文文本编码错误 python读入中文txt文本: #coding:utf-8 def readFile(): fp = open('emotion_dict//neg//neg_al ...

  4. CBV如何添加装饰器?

    目录 一:CBV如何添加装饰器 1.CBV中django不建议直接给类的方法加装饰器 2.CBC添加装饰器的三种方法 3.CBV添加装饰器实战 一:CBV如何添加装饰器 1.CBV中django不建议 ...

  5. PHP 视频源文件加密方案

    先说下原理:因为视频是付费的,肯定需要作视频加密处理. 加密可实现的方式:修改视频字节流,只能替换字节流,例如头100-1024字节进行加密,源文件就无法打开了. 下面上代码吧,加解密是 openss ...

  6. Python怎么引入不同的库?

    怎么引入不同的库? 在线安装库 1)pip install 模块名 2)国内源: 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirr ...

  7. vue项目 h5上拉加载(分页功能)

    <template> <div class="receivable"> <div class="application-header fle ...

  8. JavaScript:操作符:赋值运算符和空赋值(??=)

    =号是赋值运算,即返回符号右边的结果,同时将结果赋值给符号左边的变量,考虑下面代码的运行结果: 赋值运算b = 1 + 1,做了两件事,先返回符号右边的结果,即2,这个2将参与a = 1 + 2的计算 ...

  9. Python实验报告(第8章)

    实验8:模块 一.实验目的和要求 1.了解模块的内容: 2.掌握模块的创建和导入方式: 3.了解包结构的创建和使用. 二.实验环境 软件版本:Python 3.10 64_bit 三.实验过程 1.实 ...

  10. [seaborn] seaborn学习笔记10-绘图实例(2) Drawing example(2)

    文章目录 10 绘图实例(2) Drawing example(2) 1. Grouped violinplots with split violins(violinplot) 2. Annotate ...