Kimlik doğrulaması için Python Flask web uygulaması hazırlama
Bu öğretici, Python Flask web uygulaması oluşturmayı ve Microsoft kimlik platformu kullanarak oturum açma desteği eklemeyi gösteren serinin 2. bölümüdür. Bu serinin 1. bölümünde, uygulamayı Microsoft Entra Id kiracınıza kaydettiniz ve yapılandırdınız.
Bu öğreticide şunları yaptınız:
- Yeni python flask web uygulaması projesi oluşturma
- Uygulama bağımlılıklarını yükleme
- Uygulamanın kullanıcı arabirimi bileşenlerini ekleme
- Flask web uygulamanızı kimlik doğrulaması için Microsoft Entra Id kullanacak şekilde yapılandırma
Önkoşullar
- Öğretici: python web uygulamasını Microsoft kimlik platformu kaydetme bölümünde yer alan adımları tamamlayın.
- Visual Studio Code veya başka bir IDE.
- Python 3.9 veya üzeri yerel olarak yüklenir.
Yeni python web uygulaması projesi oluşturma
Öğreticinin geri kalanını tamamlamak için bir Python Flask web uygulaması projesi oluşturmanız gerekir. Öğrenme için tamamlanmış bir kod örneği kullanmayı tercih ediyorsanız GitHub'dan Python Flask web uygulaması örneğini indirin.
Python Flask web uygulamasını sıfırdan oluşturmak için şu adımları izleyin:
- Uygulamanızı barındırmak ve flask-web-app olarak adlandırmak için bir klasör oluşturun.
- Proje dizininize gidin ve app.py, app.config.py ve requirements.txt adlı üç dosya oluşturun.
- Projenin kök klasöründe bir .env dosyası oluşturun.
- Proje kök dizininizde templates adlı bir klasör oluşturun. Flask bu alt dizinde işleme şablonlarını arar.
Dosyaları oluşturduktan sonra projenizin dosyası ve dizini aşağıdaki yapıya benzer olmalıdır:
python-webapp/
├── templates/
│ ├── display.html
│ ├── index.html
│ ├── login.html
├── .env.sample
├── app.py
├── app.config.py
│── requirements.txt
Uygulama bağımlılıklarını yükleme
Oluşturduğunuz uygulama, Python için Microsoft Authentication Library (MSAL) çevresindeki bir sarmalayıcı olan paketini kullanıridentity
. Ayrıca Flask, Flask Oturumu, istekler ve uygulamanın gerektirdiği diğer tüm bağımlılıkları da yüklersiniz. requirements.txt bu bağımlılıklarla güncelleştirin.
Flask>=2.2
Flask-Session>=0.3.2,<0.6
werkzeug>=2
requests>=2,<3
identity>=0.5.1,<0.6
python-dotenv<0.22
Uygulama kullanıcı arabirimi bileşenleri ekleme
Bu bölümde, uygulamada tanımladığınız yolların her biri için oturum açma, oturum kapatma, API çağrıları ve hata şablonları gibi HTML şablonları oluşturacaksınız. Bu sayfaların her biri için şablon oluşturmak için şu adımları izleyin:
Oturum açma şablonları
templates klasöründe, login.html adlı bir HTML dosyası oluşturun ve aşağıdaki içeriği ekleyin:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Microsoft Identity Python Web App: Login</title>
</head>
<body>
<h1>Microsoft Identity Python Web App</h1>
{% if user_code %}
<ol>
<li>To sign in, type <b>{{ user_code }}</b> into
<a href='{{ auth_uri }}' target=_blank>{{ auth_uri }}</a>
to authenticate.
</li>
<li>And then <a href="{{ url_for('auth_response') }}">proceed</a>.</li>
</ol>
{% else %}
<ul><li><a href='{{ auth_uri }}'>Sign In</a></li></ul>
{% endif %}
<hr>
<footer style="text-align: right">Microsoft identity platform Web App Sample {{ version }}</footer>
</body>
</html>
Bu şablon, kullanıcıların uygulamanızda oturum açabileceği oturum açma sayfasını temsil eder.
Dizin şablonu
templates klasöründe, index.html adlı bir HTML dosyası oluşturun ve aşağıdaki içeriği ekleyin:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Microsoft Identity Python Web App: Index</title>
</head>
<body>
<h1>Microsoft Identity Python Web App</h1>
<h2>Welcome {{ user.get("name") }}!</h2>
<ul>
{% if config.get("ENDPOINT") %}
<li><a href='/call_downstream_api'>Call a downstream API</a></li>
{% endif %}
<li><a href="/logout">Logout</a></li>
</ul>
<hr>
<footer style="text-align: right">Microsoft identity platform Web App Sample {{ version }}</footer>
</body>
</html>
Dizin şablonu, kullanıcılar uygulamanın kök URL'sini ziyaret ettiğinde işlenen web uygulaması için bir giriş sayfası görevi görür.
Görüntüleme sayfası
Bu şablon, aşağı akış API çağrısının sonucunu görüntülemek için kullanılır. aşağıdaki kod parçacığını display.html ekleyin.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Microsoft Identity Python Web App: API</title>
</head>
<body>
<a href="javascript:window.history.go(-1)">Back</a> <!-- Displayed on top of a potentially large JSON response, so it will remain visible -->
<h1>Result of the downstream API Call</h1>
<pre>{{ result |tojson(indent=4) }}</pre> <!-- Just a generic json viewer -->
</body>
</html>
Hata şablonları
Kimlik doğrulaması hata şablonu
şablonlar klasöründe, auth_error.html adlı ve ortaya çıkabilecek hata iletilerini görüntüleyen bir HTML dosyası oluşturun. aşağıdaki kodu auth_error.html ekleyin.
<!DOCTYPE html>*
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Microsoft Identity Python Web App: Error</title>
</head>
<body>
<h2>Login Failure</h2>
<dl>
{#
Flask automatically escapes these unsafe input, so we do not have to.
See also https://flask.palletsprojects.com/en/2.0.x/templating/#jinja-setup
#}
<dt>{{ result.get("error") }}</dt>
<dd>{{ result.get("error_description") }}</dd>
</dl>
<hr>
<a href="{{ url_for('index') }}">Homepage</a>
</body>
</html>
Yapılandırma hatası şablonu
Şablonlar klasöründe, gerekli yapılandırma eksik olduğunda ileti görüntüleyen config_error.html adlı bir HTML dosyası oluşturun. aşağıdaki kodu config_error.html ekleyin.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Microsoft Identity Python Web App: Error</title>
</head>
<body>
<h2>Config Missing</h2>
<p>
Almost there. Did you forget to set up
<a target=_blank
href="https://learn.microsoft.com/azure/active-directory/develop/web-app-quickstart?pivots=devlang-python#step-5-configure-the-sample-app">
necessary environment variables</a> for your deployment?
</p>
<hr>
<a href="{{ url_for('index') }}">Homepage</a>
</body>
</html>
Yapılandırma dosyasını oluşturma
Kod düzenleyicinizde yapılandırma parametrelerini barındıran app_config.py açın ve aşağıdaki kodu ekleyin:
import os
AUTHORITY= os.getenv("AUTHORITY")
# Application (client) ID of app registration
CLIENT_ID = os.getenv("CLIENT_ID")
# Application's generated client secret: never check this into source control!
CLIENT_SECRET = os.getenv("CLIENT_SECRET")
REDIRECT_PATH = "/getAToken" # Used for forming an absolute URL to your redirect URI.
ENDPOINT = 'https://graph.microsoft.com/v1.0/me'
SCOPE = ["User.Read"]
# Tells the Flask-session extension to store sessions in the filesystem
SESSION_TYPE = "filesystem"
Yapılandırma ayarlarını depolamak için bir .env dosyası oluşturun.
Bu örnekte, uygulamanın yapılandırma ayarlarını, ortam değişkenlerini ve kodumuza eklenmemesi gereken kimlik bilgilerini depolamak ve yönetmek için bir .env dosyası kullanırsınız. Proje dizininizin kökünde oluşturduğunuz .env dosyasını açın ve aşağıdaki değerleri ekleyin.
# The following variables are required for the app to run.
CLIENT_ID=<client id>
CLIENT_SECRET=<client secret>
AUTHORITY=<Enter_your_authority_url>
.env.sample dosyanızda aşağıdaki yer tutucuları değiştirin:
-
CLIENT_ID
uygulama kaydına genel bakış sayfasında Bulunan Uygulama (istemci) kimliği ile.CLIENT_SECRET
Sertifikalar ve Gizli Diziler'de oluşturduğunuz istemci gizli dizisiyleAUTHORITY
yerinehttps://login.microsoftonline.com/<TENANT_GUID>
yazın. Dizin (kiracı) kimliği, uygulama kaydına genel bakış sayfasında bulunur.
Sonraki adım
Bu öğretici serisinin sonraki bölümünde Python Flask web uygulamasına oturum açma desteği eklemeyi öğrenin:
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin