Аутентификация пользователя в JIRA с OAuth в колбе - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь создать сайт, который подключается к jira, чтобы создавать проблемы.Веб-сайт должен запросить авторизацию у пользователя (используя OAuth1), а затем подключиться к Jira.

Когда пользователь подключается к / loginjira, веб-сайт получает токен запроса, а затем перенаправляет пользователя на страницу аутентификации JIRA.в новой вкладке, перенаправляя текущую вкладку в / gettoken.Как только пользователь подключен, он может закрыть новую вкладку (JIRA не перезванивает мой веб-сайт). Проблема здесь: как только пользователь вернулся на веб-сайт, у меня нет возможности получить токен доступа.

Я черпал вдохновение из кода здесь: https://bitbucket.org/MicahCarrick/atlassian-oauth-examples/src/68d005311b9b74d6a85787bb87ccc948766486d3/python-requests/example.py

def request_token():
    f = open(auth.root_path + '\\rsa.pem', 'r')
    secret = f.read()
    f.close()

    request_token_url = 'https://website.com/jira/plugins/servlet/oauth/request-token'
    authorize_url = 'https://website.com/jira/plugins/servlet/oauth/authorize'
    oauth = OAuth1Session('oAuthKey',
                        signature_type='auth_header',
                        signature_method=SIGNATURE_RSA,
                        verifier="jira_verifier",
                        rsa_key=secret)
    request_token = oauth.fetch_request_token(request_token_url)
    session['request_token'] = request_token


    url = authorize_url + '?oauth_token=' + request_token['oauth_token']

    return render_template('login.html', url=url)

@auth.route('/loginjira')
def loginjira():
    session.permanent = True

    if 'access_token' not in session:
        return request_token()

    return render_template('display.html', url=url)

@auth.route('/gettoken')
def get_token(): 
    f = open(auth.root_path + '\\rsa.pem', 'r')
    secret = f.read()
    f.close()

    oauth = OAuth1Session('oAuthKey',
                        signature_type='auth_header',
                        signature_method=SIGNATURE_RSA,
                        verifier="jira_verifier",
                        rsa_key=secret)
    access_url = 'https://website.com/jira/plugins/servlet/oauth/access-token'

    access_token = oauth.fetch_access_token(access_url)

    jira = JIRA(options={'server': "https://website.com/jira/"}, oauth={
        'access_token': access_token['oauth_token'],
        'access_token_secret': access_token['oauth_token_secret'],
        'consumer_key': "oAuthKey",
        'key_cert': secret
    })

    issue = jira.issue('ISSUE-ID')
    print("issue: " + issue.fields.summary)

Я не могу найти способ, чтобы колба "сохранила" объект oauth1session между двумя видами - например.как только пользователь принял токен запроса, извлеките токен доступа.

Я получаю

requests_oauthlib.oauth1_session.TokenRequestDenied: Token request failed with code 401, response was 'oauth_problem=permission_unknown'.

Я искал способ иметь постоянный сеанс oauth на стороне сервера для каждого клиента, но не смог найти способ.

Есть кто-нибудьсделал что-то подобное?

...