私たちのチームでは、gitlab ( https://git.example ) とバンドルされている Mattermost チャット ( https://chat.example ) を使用しています。
何よりも、通常のユーザーとまったく同じように実際にログインする専用のボット ユーザー (Web フックにはプライベート チャネルなどに関する制限があります) が必要です。
そのユーザーを gitlab で作成し、chrome 経由でチャットにログインできます (チャット ログイン redir --> gitlab oauth、ユーザー名と pw を入力 --> redir back to chat --> authed)。
今、私は実際にこれを行うことができるpythonライブラリを検索しましたが、必要なものしか見つけることができませclient_id
んclient_secret
... gitlab 経由で認証する別のアプリケーションを作成したくありませんが、gitlab 経由でユーザーとしてチャット (既にid
(既知) とsecret
(不明) が存在する) にログインします。
そのようなライブラリが見つからなかったため、chrome でネットワーク リクエストを調べ、 を介して python で再作成しようとしましrequests
たが、動作させることができませんでした (言うまでもなく、html および csrf トークンの解析が必要です)。 ..
さらに別の試みと多くの当て推量を使用して、access_token
手動で取得しようとしました
client_id = 'the one of mattermost in our gitlab'
user = 'username'
pw = 'password'
r = requests.post(
'https://git.example/oauth/token',
data={
"grant_type": "password",
"username": user,
"password": pw,
"client_id": client_id,
}
)
access_token = r.json()['access_token']
これは機能しているように見えます (そしてトークンは良さそうです) が、最も重要な API で使用すると 401 になるだけです:
ri = requests.get(
'https://chat.example/api/v1/users/me',
headers={'Authorization': 'Bearer ' + access_token}
)
ri.status_code, ri.json()
(401,
{u'detailed_error': u'token=...xxx...',
u'id': u'api.context.session_expired.app_error',
u'is_oauth': False,
u'message': u'Invalid or expired session, please login again.',
u'request_id': u'...yyy...',
u'status_code': 401})
悲しいことにhttp://docs.mattermost.com/developer/web-service.html#oauth2は現在、これ以上の光を当てていないため、ここで質問しています。それを「アクティブ化」するための明らかな何かを見逃したaccess_token
のでしょうか?