我正在寻找对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
部分?如何自动获取?在教程之后我错过了什么?任何帮助将不胜感激。
谢谢!