flask에 의한 slack의 OAuth 인증을 해 본다(Slack API V2)

8364 단어 슬랙파이썬

OAuth 인증 필요



슬랙 앱을 만들 때 하나의 작업 공간에만 설치하면 앱의 설정 페이지에서 수동으로 설치할 수 있습니다.
하지만 앱을 개인적으로 설치하거나 궁극적으로 Slack 디렉토리에 게시하는 경우 OAuth 인증으로 설치해야합니다.

슬랙의 OAuth 인증 메커니즘은 일반적인 것과 동일하다고 생각합니다.

flask로 구현



필요한 정보


  • client_id
  • client_secret

  • 코드


    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 URLshttp://localhost:5000/finish_auth 등록.
    Save URLs 에 저장



    액세스



    이것으로 준비 완료
    flask를 시작하고 http://localhost:5000/begin_auth에 액세스합니다.


    링크를 클릭하면 슬랙 인증을 받게 됩니다.



    Allow를 누르면 다음 화면으로 이동하여 그 때 token을 생성합니다.
    확인을 위해 UUID4가 일치하면 목록에서 지우고 slackClient를 사용하여 액세스 토큰을 검색합니다.



    이번 코드에서는 쓰지 않지만, 얻은 액세스 토큰은 다음에 이용하기 위해 저장합시다.

    참고



    slack API 한국어 문서
    Installing with OAuth

    좋은 웹페이지 즐겨찾기