私たちのチームでは、gitlab(https://git.example)とバンドルされたほとんどのチャット(https://chat.example)を使用します。gitlab oauthを使って重要なapiをユーザー名とパスワードを持つエンドユーザーとして使用します(client_secretなし)
ほとんどの場合、専用のボットユーザー(Webフックにはプライベートチャンネルなどの制限があります)があります。実際には通常のユーザーとまったく同じようにログインします。
gitlabでそのユーザーを作成し、chrome(chat login redir - > gitlab oauth、usernameを入力、pw - > redirをチャット - > authed)でチャットにログインできます。
私は実際にこれを行うことができるPythonライブラリを探しましたが、私はclient_id
とclient_secret
を必要とするものしか見つけられません...私の理解から(私が間違っている場合は私を修正してください) gitlabで認証する別のアプリケーションを作成するのではなく、gitlabを使ってユーザとしてチャット(既にid
(既知)とsecret
(未知)を持っている)にログインしているので、
私たちはこのようなライブラリを見つけることができなかったので、ネットワークリクエストをchromeで調べ、requests
経由でpythonで再作成しようとしましたが、動作させることはできません(もちろん、htmlそして、CSRFトークンを)...
我々は
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']
これが動作しているようです(とトークンがよさそうだ)、それを使用して手動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
を "活性化"する明白な何かを逃したでしょうか? ...