Как олицетворять пользователя в дополнении Jira для использования Jira REST API от имени пользователя - PullRequest
0 голосов
/ 13 декабря 2018

Я ищу помощь кого-то, кто знает что-то о дополнениях Jira.

Я пытаюсь реализовать дополнение Jira с возможностью создавать проблемы от имени пользователя.

Итак, я выполнил все шаги (как мне кажется), ведя меня к своей цели, но я столкнулся с проблемой подражания.Когда я пытаюсь создать проблему, используя Jira REST API, я получаю следующую ошибку:

{"error": "дополнение" com.example.myapp "не разрешено выдавать себя за пользователя, потому что"действительный активный пользователь не существует '"}

Что было сделано:

После начало работы руководство Я создал дескриптор дополнения:

{
 "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 для обработки обратного вызова ' Установлено ' из дополнения, как описано здесь .Поэтому, когда пользователь устанавливает надстройку, 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, подписанный общим секретным ключом, как описано в учебнике .Итак, моя полезная нагрузка 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.Но описанная выше ошибка возвращалась каждый раз, когда я пытался создать проблему Jira, выполняющую POST [user's domain].atlassian.net/rest/api/2/issue/ с заголовком Authorization: Bearer [access_token].

Я заметил, что идентификатор учетной записи в установленном объекте обратного вызова (clientKey) имеет 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' (uuid) формат.Но когда я открываю свою учетную запись в Jira (учетная запись в которой установлена ​​надстройка), я вижу, что идентификатор учетной записи в URL имеет формат 'YYYYYY:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'.Я добавил тему в свою полезную нагрузку JWT с частью YYYYYY:

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

и с помощью этого JWT сгенерировал новый токен доступа.Я использовал новый токен доступа для создания проблемы, и она была успешно создана. Репортер проблемы - пользователь установил мое дополнение, как я и хотел.

Наконец, вопрос: где я могу найти эту YYYYYY часть для моего дополнения?Как получить это автоматически?Что я пропустил после уроков?Любая помощь будет оценена.

Спасибо!

...