如何模拟Jira附加组件中的用户以代表用户使用Jira REST API

时间:2018-12-13 20:56:01

标签: jwt jira impersonation

我正在寻找对Jira插件有所了解的人的帮助。

我正在尝试实现Jira附加组件,使其能够代表用户创建问题。

因此,我完成了所有步骤(按照我的想法),将我引向了目标,但是我在模拟方面遇到了问题。当我尝试使用Jira REST API创建问题时,出现以下错误:

  

{        “错误”:“由于'不存在有效的活动用户,所以不允许假冒用户的附件'com.example.myapp''”       }

完成了什么

getting started教程之后,我创建了附加描述符:

{
 "name": "Hello World",
 "description": "Atlassian Connect app",
 "key": "com.example.myapp",
 "baseUrl": "https://url.ngrok.io",
 "vendor": {
     "name": "Example, Inc.",
     "url": "http://example.com"
 },
 "authentication": {
     "type": "jwt"
 },
 "scopes": [
    "act_as_user",
    "read",
    "write",
 ],
 "lifecycle": {
    "installed": "/api/created",
 },
 "apiVersion": 1
}

我还实现了webhook来处理来自插件的“ 已安装”回调,如here所述。因此,当用户安装插件时,webhook将收到以下对象:

{
  'key': 'com.example.myapp', 
  'clientKey': '<client key>', 
  'oauthClientId': '<OAuth client ID>', 
  'publicKey': '<public key>', 
  'sharedSecret': '<shared secret>', 
  'serverVersion': '100095', 
  'pluginsVersion': '1.250.0', 
  'baseUrl': 'https://<user's domain>.atlassian.net', 
  'productType': 'jira', 
  'description': 'Description', 
  'eventType': 'installed'
}

使用此数据,我生成了用共享机密签名的JWT,如tutorial中所述。因此,我的JWT有效负载包括以下声明:

{
  'iss': 'urn:atlassian:connect:clientid:<OAuth client ID>',
  'sub': 'urn:atlassian:connect:useraccountid:<client key>',
  'tnt': 'https://<user's domain>.atlassian.net',
  'iss': '<created at>',
  'exp': '<created at + 1 minute>'
}

我执行的下一步是使用 auth.atlassian.io/oauth2/token 端点和以下参数生成访问令牌:

grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=<my JWT>&scope=ACT_AS_USER READ WRITE

所有这些操作的结果是我可以用来执行REST API请求的访问令牌。但是,每次我尝试创建带有POST [user's domain].atlassian.net/rest/api/2/issue/标头的Authorization: Bearer [access_token]的Jira问题时,都会返回上述错误。

我注意到的是,已安装的回调对象(clientKey)中的帐户ID为'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'(uuid)格式。但是,当我在吉拉(Jira)中打开帐户(安装了附加组件中的帐户)时,我看到URL中的帐户ID具有'YYYYYY:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'格式。我将该主题放在YYYYYY部分的JWT有效载荷中:

'sub': 'urn:atlassian:connect:useraccountid:'YYYYYY:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'

,并使用此JWT生成了新的访问令牌。我已经使用新的访问令牌创建了一个问题,并成功创建了该问题,该问题的报告者是用户安装了我的加载项,就像我希望的那样。

最后,问题是:在哪里可以找到我的插件的YYYYYY部分?如何自动获取?在教程之后我错过了什么?任何帮助将不胜感激。

谢谢!

0 个答案:

没有答案