[PYTHON] Versuchen Sie eine lockere OAuth-Authentifizierung mit einem Kolben (Slack API V2).

Notwendigkeit einer OAuth-Authentifizierung

Wenn Sie beim Erstellen einer Slack-App diese nur in einem Arbeitsbereich installieren möchten, können Sie sie manuell über die ** Einstellungsseite ** der App installieren. Wenn Sie die App jedoch persönlich installieren oder schließlich ** im Slack-Verzeichnis veröffentlichen möchten, müssen Sie sie mit OAuth-Authentifizierung installieren.

Ich denke, dass der Mechanismus der OAuth-Authentifizierung von Slack der gleiche ist wie der allgemeine.

Implementierung per Kolben

Notwendige Informationen

Code

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"]
#Fügen Sie hier den für die App erforderlichen Bereich hinzu.
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():
    """Erstellen Sie einen Link zur OAuth-Authentifizierungsseite von slack und zeigen Sie ihn an."""
    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():
    """Dies ist die Verarbeitung des umgeleiteten Zugriffs nach Abschluss der Authentifizierung."""
    auth_code = request.args['code']
    state_code = request.args['state']

    #state_401, wenn die Codes nicht übereinstimmen
    if not state_code in uuids:
        return make_response("", 401)
    else:
        uuids.remove(state_code)

    #Erstellen Sie zur Authentifizierung einen Client mit einem leeren Token.
    client = slack.WebClient(token="")

    #Fordern Sie ein Authentifizierungstoken an.
    response = client.oauth_v2_access(
        client_id=client_id,
        client_secret=client_secret,
        code=auth_code
    )

    #Speichern Sie das Slackbot-Token in der Datenbank usw.
    SLACK_BOT_TOKEN = response['access_token']

    #Vergessen Sie nicht, Ihren Benutzern den Erfolg mitzuteilen!
    return make_response("Erfolgreiche Authentifizierung!!", 200)

app.run()

Festlegen der Weiterleitungs-URL

Registrieren Sie http: // localhost: 5000 / finish_auth in App> Grundlegende Informationen> OAuth & Berechtigungen> URLs umleiten.

Speichern Sie mit "URLs speichern"

スクリーンショット 2020-03-31 14.17.13.png

Zugriff

Jetzt bist du bereit Starten Sie den Kolben und greifen Sie auf "http: // localhost: 5000 / begin_auth" zu. スクリーンショット 2020-03-31 14.21.57.png

Klicken Sie auf den Link und Sie werden aufgefordert, Slack zu authentifizieren.

スクリーンショット 2020-03-31 14.24.42.png

Drücken Sie Zulassen, um zum nächsten Bildschirm zu wechseln und zu diesem Zeitpunkt einen Token zu generieren. Wenn die UUID4 für die Überprüfung übereinstimmt, entfernen Sie sie aus der Liste und verwenden Sie den slackClient, um das Zugriffstoken abzurufen.

スクリーンショット 2020-03-31 14.30.35.png

Ich habe es nicht in diesen Code geschrieben, aber speichern wir das erhaltene Zugriffstoken für die nächste Verwendung.

Referenz

Slack API Japanese Document Installing with OAuth

Recommended Posts

Versuchen Sie eine lockere OAuth-Authentifizierung mit einem Kolben (Slack API V2).
Flow, um die Slack-Authentifizierung mit Flask (Python) abzuschließen
Klicken Sie nach der Oauth-Authentifizierung mit Django auf die Twitter-API
Versuchen Sie, mit MVC eine RESTful-API mit Flask 1.0.2 zu erstellen
API mit Flask + uWSGI + Nginx
Qiita API Oauth mit Django
Behalten Sie den Flask API-Server für immer bei
Basisauthentifizierung, Digest-Authentifizierung mit Flask
Beispiel zur Verwendung nach OAuth-Authentifizierung der BOX-API mit Python
[Python] Erstellen Sie schnell eine API mit Flask
Flask kann mit Azure API Apps nicht RESTful sein
[AWS] Versuchen Sie, API Gateway + Lambda mit X-Ray zu verfolgen
[Python] Erwähnen Sie mit der Slack-API mehrere Personen
Flask Basic-Zertifizierung
Versuchen Sie, mit der Twitter-API v2 ein soziales Diagramm zu zeichnen
Hochladen auf ein freigegebenes Laufwerk mit Google Drive API V3