Aracılığıyla paylaş


Öğretici: Microsoft kimlik platformunu kullanarak Python Flask web uygulamasında kullanıcıların oturum açması

Şunlar için geçerlidir: Aşağıdaki içeriğin iş gücü kiracıları için geçerli olduğunu gösteren beyaz onay işareti simgesine sahip yeşil daire. İş gücü kiracıları Aşağıdaki içeriğin dış kiracılar için geçerli olduğunu gösteren beyaz onay işareti simgesine sahip yeşil daire. Dış kiracılar (daha fazla bilgi edinin)

Bu öğretici, Python Flask Web uygulamasının güvenliğini sağlama konusunda size yol gösterir.

Bu öğreticide şunları yapacaksınız:

  • Python Flask projesi oluşturma
  • Gerekli bağımlılıkları yükleme
  • Flask web uygulamanızı kimlik doğrulaması için Microsoft kimlik platformunuzu kullanacak şekilde yapılandırma
  • Flask web uygulamanızda oturum açma ve oturum kapatma deneyimini test edin

Önkoşullar

  • Çalışan konut kiracısı. Varsayılan Dizininizi kullanabilir veya yeni bir kiracı ayarlayabilirsiniz.
  • Microsoft Entra yönetim merkezine, yalnızca bu kuruluş dizinindeki Hesaplar için yapılandırılmış yeni bir uygulama kaydedin. Daha fazla bilgi için Bir uygulamayı kaydetme bölümüne bakın. Daha sonra kullanmak üzere uygulamaya Genel Bakış sayfasından aşağıdaki değerleri kaydedin:
    • Uygulama (istemci) kimliği
    • Dizin (kullanıcı) kimliği
  • Uygulama kaydınıza bir istemci gizli dizisi ekleyin. Üretim uygulamalarında istemci gizli dizilerini kullanmayın. Bunun yerine sertifikaları veya federasyon kimlik bilgilerini kullanın. Daha fazla bilgi için bkz. Uygulamanıza kimlik bilgileri ekleme.

Flask projesi oluşturma

  1. Flask uygulamanızı barındırmak için flask-web-appgibi bir klasör oluşturun.

  2. Bir konsol penceresi açın ve komutunu kullanarak dizini flask web uygulaması klasörünüz olarak değiştirin

    cd flask-web-app
    
  3. Sanal ortamı ayarlama

    İşletim sisteminize bağlı olarak, sanal ortamınızı ayarlamak ve etkinleştirmek için aşağıdaki komutları çalıştırın:

    Windows işletim sistemi için:

    py -m venv .venv
    .venv\scripts\activate
    

    macOS veya Linux işletim sistemi için:

    python3 -m venv .venv
    source .venv/bin/activate
    

Uygulama bağımlılıklarını yükleme

Uygulama bağımlılıklarını yüklemek için aşağıdaki komutları çalıştırın:

pip install flask
pip install python-dotenv
pip install requests
pip install "ms_identity_python[flask] @ git+https://github.com/azure-samples/ms-identity-python@0.9"

Yüklediğiniz ms_identity_python kitaplığı, bağımlılığı olarak Python için Microsoft Kimlik Doğrulama Kitaplığı'nı (MSAL) otomatik olarak yükler. MSAL Python, kullanıcıların kimliğini doğrulamanızı ve erişim belirteçlerini yönetmenizi sağlayan kitaplıktır.

Gerekli kitaplıkları yükledikten sonra aşağıdaki komutu çalıştırarak gereksinimler dosyanızı güncelleştirin:

pip freeze > requirements.txt

Uygulamayı kimlik doğrulaması için yapılandırma

Microsoft kimlik platformunu kullanarak kullanıcılarda oturum açabilen web uygulamaları bir yapılandırma dosyası ( .env) aracılığıyla yapılandırılır. Python Flask'te aşağıdaki değerleri belirtmelidir:

Ortam değişkeni Description
AUTHORITY Uygulamanın kaydedildiği bulut örneğinin URL'si. Biçim: https://{Instance}/{TenantId}. Aşağıdaki Örnek değerlerinden birini kullanın:
- https://login.microsoftonline.com/ (Azure genel bulutu)
- https://login.microsoftonline.us/ (Azure ABD kamu)
- https://login.microsoftonline.de/ (Microsoft Entra Germany)
- https://login.partner.microsoftonline.cn/ (Microsoft Entra China, 21Vianet tarafından işletilmektedir)
TENANT_ID Uygulamanın kayıtlı olduğu kiracının tanımlayıcısı. Uygulama kaydından kiracı kimliğini tercih edin veya şunlardan birini kullanın:
- organizations: kullanıcıların herhangi bir iş veya okul hesabında oturum açması
- common: herhangi bir iş veya okul hesabıyla veya Microsoft kişisel hesabıyla kullanıcıları oturum açma
- consumers: kullanıcıları yalnızca Microsoft kişisel hesabıyla oturum açma
CLIENT_ID Uygulama kaydından alınan uygulamanın (istemci) tanımlayıcısı.
CLIENT_SECRET Microsoft Entra yönetim merkezine kimlik bilgileri ekleme bölümünden alınan gizli dizi değeri.
REDIRECT_URI Microsoft kimlik platformunun kimlik doğrulamasından sonra güvenlik belirteçleri gönderdiği URI.

Yapılandırma dosyasını güncelleştirme

  1. Uygulamanızın yapılandırmasını güvenli bir şekilde depolamak için kök klasörünüzde bir .env dosyası oluşturun. .env dosyanız aşağıdaki ortam değişkenlerini içermelidir:

    CLIENT_ID="<Enter_your_client_id>"
    CLIENT_SECRET="<Enter_your_client_secret>"
    AUTHORITY="https://login.microsoftonline.com/<Enter_tenant_id>"
    REDIRECT_URI="<Enter_redirect_uri>"
    

    Yer tutucuları aşağıdaki değerlerle değiştirin:

    • Kaydettiğiniz istemci web uygulamasının <Enter_your_client_id> ile 'ı değiştirin.
    • <Enter_tenant_id>'ı web uygulamanızı kaydettiğiniz Dizin veya Kiracı Kimliği ile değiştirin.
    • <Enter_your_client_secret> değerini, oluşturduğunuz web uygulamasının İstemci gizli anahtarı değeriyle değiştirin. Bu öğreticide, tanıtım amacıyla gizli bilgileri kullanıyoruz. Üretimde, sertifikaları veya federasyon kimlik bilgileri gibi daha güvenli yaklaşımlar kullanın.
    • <Enter_redirect_uri> değerini daha önce kaydettiğiniz yeniden yönlendirme URI'siyle değiştirin. Bu öğretici, yeniden yönlendirme URI yolunu http://localhost:3000/getATokenolarak ayarlar.
  2. Ortam değişkenlerini okumak ve ihtiyacınız olan diğer yapılandırmaları eklemek için bir app_config.py dosyası oluşturun.

    import os
    
    AUTHORITY = os.getenv("AUTHORITY")
    CLIENT_ID = os.getenv("CLIENT_ID")
    CLIENT_SECRET = os.getenv("CLIENT_SECRET")
    REDIRECT_URI = os.getenv("REDIRECT_URI")
    SESSION_TYPE = "filesystem" # Tells the Flask-session extension to store sessions in the filesystem. Don't use in production apps.
    

Uygulama uç noktalarını yapılandırma

Bu aşamada, web uygulaması uç noktalarınızı oluşturur ve iş mantığını uygulamanıza eklersiniz.

  1. Kök klasörünüzde app.py adlı bir dosya oluşturun.

  2. app.py dosyasının en üstünde gerekli bağımlılıkları içeri aktarın.

    import os
    import requests
    from flask import Flask, render_template
    from identity.flask import Auth
    import app_config
    
  3. Flask uygulamanızı başlatın ve app_config.py dosyanızda belirttiğiniz oturum depolama türünü kullanacak şekilde yapılandırın.

    app = Flask(__name__)
    app.config.from_object(app_config)
    
  4. Uygulama istemcisini başlatın. Flask web uygulaması gizli bir istemcidir. İstemci sırrını geçiririz çünkü gizli istemciler bunu güvenle saklayabilir. Arka planda, kimlik kitaplığı MSAL kitaplığının ConfidentialClientApplication sınıfını çağırır.

    auth = Auth(
        app,
        authority=app.config["AUTHORITY"],
        client_id=app.config["CLIENT_ID"],
        client_credential=app.config["CLIENT_SECRET"],
        redirect_uri=app.config["REDIRECT_URI"]
    )
    
  5. Flask uygulamanıza gerekli uç noktaları ekleyin. Web uygulaması, kullanıcıda oturum açmak için yetkilendirme kodu akışını kullanır. ms_identity_python MSAL sarmalayıcı kitaplığı, MSAL kütüphanesi ile etkileşim kurmayı kolaylaştırarak uygulamanıza kullanıcı oturumu açmayı ve kapatmayı daha kolay eklemenize yardımcı olur. Bir dizin sayfası ekler ve login_required kitaplığı tarafından sağlanan dekoratörü kullanarak bu sayfayı koruruz. login_required dekoratörü, dizin sayfasına yalnızca kimliği doğrulanmış kullanıcıların erişebilmesini sağlar.

    @app.route("/")
    @auth.login_required
    def index(*, context):
        return render_template(
            'index.html',
            user=context['user'],
            title="Flask Web App Sample",
        )
    

    Bu görünümü @login_requiredile dekore ettiğimiz için kullanıcının mevcut olması garanti edilir.

Uygulama şablonlarını oluşturma

Kök klasörünüzde şablonları adlı bir klasör oluşturun. templates klasöründe index.htmladlı bir dosya oluşturun. Bu, uygulamanın giriş sayfasıdır. index.html dosyasına aşağıdaki kodu ekleyin:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{ title }}</title>
</head>
<body>
    <h1>{{ title }}</h1>
    <h2>Welcome {{ user.get("name") }}!</h2>

    <img src="https://github.com/Azure-Samples/ms-identity-python-webapp-django/raw/main/static/topology.png" alt="Topology">

    <ul>
    {% if api_endpoint %}
        <!-- If an API endpoint is declared and scopes defined, this link will show. We set this in the call an API tutorial. For this tutorial, we do not define this endpoint. -->
        <li><a href='/call_api'>Call an API</a></li>
    {% endif %}

    <li><a href="{{ url_for('identity.logout') }}">Logout</a></li>
    </ul>

    <hr>
    <footer style="text-align: right">{{ title }}</footer>
</body>
</html>

Örnek web uygulamasını çalıştırma ve test edin

  1. Terminalinizde aşağıdaki komutu çalıştırın:

    python3 -m flask run --debug --host=localhost --port=3000
    

    İstediğiniz bağlantı noktasını kullanabilirsiniz. Bu bağlantı noktası, daha önce kaydettiğiniz yeniden yönlendirme URI'sinin bağlantı noktasına benzer olmalıdır.

  2. Tarayıcınızı açın ve http://localhost:3000'a gidin. Bir oturum açma sayfası görürsünüz.

  3. Adımları izleyerek Microsoft hesabınızla oturum açın. Oturum açmak için bir e-posta adresi ve parola sağlamanız istenir.

  4. Uygulamanın ihtiyaç duyduğu kapsamlar varsa bir onay ekranı gösterilir. Uygulama, erişime izin ettiğiniz verilere erişimi korumak ve oturum açmak için izin istemektedir. SeçKabul Et. Hiçbir kapsam tanımlanmadıysa bu ekran görünmez.

Oturum açıp kaydolduktan sonra yeniden web uygulamasına yönlendirilirsiniz. Aşağıdaki ekran görüntüsüne benzer bir sayfa görürsünüz:

başarılı kimlik doğrulamasından sonra flask web uygulaması örneğinin ekran görüntüsü .

Uygulamanın oturumunu kapatmak için Oturum Kapatma'ni seçin. Oturumu kapatmak için bir hesap seçmeniz istenir. Oturum açmak için kullandığınız hesabı seçin.

Özel URL alan adı kullanma (İsteğe bağlı)

Workforce kiracıları özel URL alan adlarını desteklemez.