flask에 의한 slack의 OAuth 인증을 해 본다(Slack API V2)
OAuth 인증 필요
슬랙 앱을 만들 때 하나의 작업 공간에만 설치하면 앱의 설정 페이지에서 수동으로 설치할 수 있습니다.
하지만 앱을 개인적으로 설치하거나 궁극적으로 Slack 디렉토리에 게시하는 경우 OAuth 인증으로 설치해야합니다.
슬랙의 OAuth 인증 메커니즘은 일반적인 것과 동일하다고 생각합니다.
flask로 구현
필요한 정보
코드
import os
import slack
from flask import Flask, request, make_response
client_id = os.environ["SLACK_CLIENT_ID"]
client_secret = os.environ["SLACK_CLIENT_SECRET"]
#ここにアプリが要求するスコープを追加します。
oauth_scope = ",".join([
"channels:history",
"groups:history",
"im:history",
"mpim:history",
"chat:write"
]) #os.environ["SLACK_BOT_SCOPE"]
uuids = []
app = Flask(__name__)
@app.route("/begin_auth", methods=["GET"])
def pre_install():
"""slackのOAuth認証ページに飛ばすリンクを作成し、表示させます。"""
from uuid import uuid4
state_string = str(uuid4())
uuids.append(state_string)
return f'<a href="https://slack.com/oauth/v2/authorize?scope={ oauth_scope }&client_id={ client_id }&state={ state_string}">Add to Slack</a>'
@app.route("/finish_auth", methods=["GET", "POST"])
def post_install():
"""認証が終わった後、リダイレクトされたアクセスの処理です"""
auth_code = request.args['code']
state_code = request.args['state']
#state_codeが一致しなければ401
if not state_code in uuids:
return make_response("", 401)
else:
uuids.remove(state_code)
#認証をするには空白のトークンでクライアントを作成します。
client = slack.WebClient(token="")
#認証トークンを要求します。
response = client.oauth_v2_access(
client_id=client_id,
client_secret=client_secret,
code=auth_code
)
#スラックボットトークンをDBなどに保存します。
SLACK_BOT_TOKEN = response['access_token']
#ユーザーに成功を伝えるのを忘れないでください!
return make_response("認証成功!!", 200)
app.run()
리디렉션 URL 설정
App > Basic Information > OAuth & Permissions > Redirect URLs
에 http://localhost:5000/finish_auth
등록.Save URLs
에 저장액세스
이것으로 준비 완료
flask를 시작하고
http://localhost:5000/begin_auth
에 액세스합니다.링크를 클릭하면 슬랙 인증을 받게 됩니다.
Allow를 누르면 다음 화면으로 이동하여 그 때 token을 생성합니다.
확인을 위해 UUID4가 일치하면 목록에서 지우고 slackClient를 사용하여 액세스 토큰을 검색합니다.
이번 코드에서는 쓰지 않지만, 얻은 액세스 토큰은 다음에 이용하기 위해 저장합시다.
참고
slack API 한국어 문서
Installing with OAuth
Reference
이 문제에 관하여(flask에 의한 slack의 OAuth 인증을 해 본다(Slack API V2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/izso/items/82b83ec729ad10965a71텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)