首页 > 解决方案 > 通过 OAuth 2.0 (3LO) 应用创建 Jira 问题失败并出现错误 {"code":401,"message":"Unauthorized"}

问题描述

我是一名实习开发人员,我正在将产品与 Jira 软件(云)集成。我正在使用pythonDjango Web 框架进行开发。

我遵循了https://developer.atlassian.com/cloud/jira/platform/oauth-2-3lo-apps/文档并成功收到了访问令牌。我遵循的步骤是:

  1. 在开发者控制台中创建了一个 OAuth 2.0 (3LO) 应用程序。为“Jira 平台 REST API”和“用户身份 API”配置了权限。我选择了旋转刷新令牌选项。将回调 URL 添加为“http://localhost:8000/callback”</li>
  2. 引导用户访问授权 URL 以获取授权码。在Authorization URL中范围定义如下:
    scope = ['write:jira-work read:jira-user read:me read:jira-work']
  3. 作为响应接收代码和状态变量。
  4. 将代码值交换为访问令牌。收到的响应如下:

{"access_token":"令牌值出现在这里","scope":"write:jira-work read:jira-work read:jira-user read:me","expires_in":3600,"token_type":"Bearer" }

  1. 使用访问令牌成功接收到 could_id。

    header = {'Authorization': 'Bearer {}'.format(client.token['access_token']), 'Accept': 'application/json'}   
    response = requests.get('https://api.atlassian.com/oauth/token/accessible-resources', headers=header)
    
  2. 成功检索了经过身份验证的用户的公共配置文件。

    response = requests.get('https://api.atlassian.com/me', headers=header)
    
  3. 当我尝试创建问题时,最终出现以下错误: {"code":401,"message":"Unauthorized"}。我指的是https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issues/#api-rest-api-3-issue-post 我正在使用电子邮件(logged-在用户电子邮件中)和 API 令牌进行授权。我的 auth 参数有问题吗?如果您能帮助我找出此错误的原因,那就太好了。

创建问题的python代码:

     def post_issue(request): 
         if request.method == 'POST':
            project = request.POST['project']
            issue_type = request.POST['issue_type']
            summary = request.POST['summary']

            email = request.session['profile']['email']
            token = request.session['access_token']
  
            header1 = {'Accept':'application/json','Content-Type':'application/json'}
            data = { 'fields': 
                     {'project':{'name':project}, 
                      'summary': summary,
                      'issuetype':{'name': issue_type}
                     }
                   }

            response = requests.request('POST', url='https://api.atlassian.com/ex/jira/%s/rest/api/3/issue'%(request.session.get('cloud_id')), data = json.dumps(data), headers=header1 , auth=HTTPBasicAuth(email,token))
            if response.status_code == 201:
              print('Successfully created Issue')
            else:
              print('Could not create Issue')
              print('Response:', response.content)

标签: djangopython-requestscloudjira

解决方案


推荐阅读