[PYTHON] Essayez l'authentification OAuth Slack avec Flask (API Slack V2)

Besoin d'authentification OAuth

Lors de la création d'une application Slack, si vous souhaitez l'installer dans un seul espace de travail, vous pouvez l'installer manuellement à partir de la ** page des paramètres ** de l'application. Cependant, si vous souhaitez installer l'application personnellement, ou enfin ** la publier dans le répertoire Slack, vous devrez l'installer avec l'authentification OAuth.

Je pense que le mécanisme d'authentification OAuth de slack est le même que celui général.

Mise en œuvre par flacon

Information nécessaire

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"]
#Ajoutez la portée requise par l'application ici.
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():
    """Créez et affichez un lien vers la page d'authentification OAuth de slack."""
    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():
    """Il s'agit du traitement de l'accès redirigé une fois l'authentification terminée."""
    auth_code = request.args['code']
    state_code = request.args['state']

    #state_401 si les codes ne correspondent pas
    if not state_code in uuids:
        return make_response("", 401)
    else:
        uuids.remove(state_code)

    #Pour vous authentifier, créez un client avec un jeton vide.
    client = slack.WebClient(token="")

    #Demandez un jeton d'authentification.
    response = client.oauth_v2_access(
        client_id=client_id,
        client_secret=client_secret,
        code=auth_code
    )

    #Enregistrez le jeton slackbot dans DB, etc.
    SLACK_BOT_TOKEN = response['access_token']

    #N'oubliez pas de dire à vos utilisateurs le succès!
    return make_response("Authentification réussie!!", 200)

app.run()

Définition de l'URL de redirection

ʻApp> Informations de base> OAuth et autorisations> Enregistrez http: // localhost: 5000 / finish_auth dans les URL de redirection`.

Enregistrer avec Enregistrer les URL

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

accès

Maintenant tu es prêt Démarrez flask et accédez à http: // localhost: 5000 / begin_auth. スクリーンショット 2020-03-31 14.21.57.png

Cliquez sur le lien et il vous sera demandé d'authentifier Slack.

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

Appuyez sur Autoriser pour passer à l'écran suivant et générer un jeton à ce moment-là. Si l'UUID4 pour la vérification correspond, supprimez-le de la liste et utilisez slackClient pour obtenir le jeton d'accès.

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

Je ne l'ai pas écrit dans ce code, mais sauvegardons le jeton d'accès obtenu pour la prochaine utilisation.

référence

document japonais de l'API slack Installing with OAuth

Recommended Posts

Essayez l'authentification OAuth Slack avec Flask (API Slack V2)
Flux pour terminer l'authentification Slack avec Flask (Python)
Accédez à l'API Twitter après l'authentification Oauth avec Django
Essayez de créer une API RESTful avec MVC à l'aide de Flask 1.0.2
API avec Flask + uWSGI + Nginx
Qiita API Oauth avec Django
Persistez le serveur d'API Flask avec Forever
Authentification de base, authentification Digest avec Flask
Exemple à utiliser après l'authentification OAuth de l'API BOX avec Python
[Python] Créez rapidement une API avec Flask
Flask ne peut pas être RESTful avec les applications d'API Azure
[AWS] Essayez de tracer API Gateway + Lambda avec X-Ray
[Python] Mention à plusieurs personnes avec l'API de Slack
Certification Flask Basic
Essayez de dessiner un graphe social à l'aide de l'API Twitter v2
Transférer vers un Drive partagé avec l'API Google Drive V3