可将用户登录的 Web 应用:代码配置

本文介绍了如何为可将用户登录的 Web 应用配置代码。

支持 Web 应用的 Microsoft 库

以下 Microsoft 库用于保护 Web 应用(和 Web API):

语言/框架 项目
GitHub
获取
入门
用户登录 访问 Web API 正式发布 (GA) 或
公共预览版1
.NET MSAL.NET Microsoft.Identity.Client 库无法为用户登录请求 ID令牌。 库可以为受保护的 Web API 请求访问令牌。 乔治亚州
.NET Microsoft.IdentityModel Microsoft.IdentityModel 图书馆无法请求用户登录的ID令牌。 2 库无法请求受保护的Web API的访问令牌。 2 乔治亚州
ASP.NET Core Microsoft.Identity.Web Microsoft.Identity.Web 快速入门 库可以为用户登录请求 ID令牌。 库可以为受保护的 Web API 请求访问令牌。 乔治亚州
爪哇岛 MSAL4J msal4j 快速入门 库可以为用户登录请求 ID令牌。 库可以为受保护的 Web API 请求访问令牌。 乔治亚州
春天 spring-cloud-azure-starter-active-directory spring-cloud-azure-starter-active-directory 教程 库可以为用户登录请求 ID令牌。 库可以为受保护的 Web API 请求访问令牌。 乔治亚州
Node.js MSAL 节点 msal-node 快速入门 库可以为用户登录请求 ID令牌。 库可以为受保护的 Web API 请求访问令牌。 乔治亚州
Python语言 MSAL Python msal 库可以为用户登录请求 ID令牌。 库可以为受保护的 Web API 请求访问令牌。 乔治亚州
Python语言 身份 身份 快速入门 库可以为用户登录请求 ID令牌。 库可以为受保护的 Web API 请求访问令牌。 --

(1)联机服务通用许可条款适用于公共预览版的库

(2)Microsoft.IdentityModel 库仅验证令牌,它不能请求 ID 或访问令牌。

选择与所需平台对应的选项卡:

本文中的代码片段及以下内容摘自使用标识包(围绕 MSAL Python 的包装器)调用 Microsoft Graph 示例的 Python Web 应用程序

你可能需要参考此示例来了解完整的实现细节。

配置文件

使用 Microsoft 标识平台将用户登录的 Web 应用程序是通过配置文件配置的。 这些文件必须指定以下值:

  • 实例(例如,如果需要在国家云中运行应用)。 不同的选项包括:
    • https://login.partner.microsoftonline.cn/common:中国 Microsoft Entra(由世纪互联运营)
  • 租户 ID 中的受众。 选项根据应用是单租户还是多租户而异。
    • 从 Azure 门户获取的租户 GUID,用于将组织中的用户登录。 也可以使用域名。
    • organizations,让用户使用任何工作或学校帐户登录
    • common,让用户使用任何工作或学校帐户登录
  • 应用程序的客户端 ID,从 Azure 门户中复制

还可能会看到对颁发机构的引用、实例租户 ID 值的串联。

配置参数在 .env 中设置为环境变量:

# Note: If you are using Azure App Service, go to your app's Configuration,
# and then set the following values into your app's "Application settings".

CLIENT_ID=<client id>
CLIENT_SECRET=<client secret>

# Expects a full tenant id such as "contoso.partner.onmschina.cn", or its GUID
# Or leave it undefined if you are building a multi-tenant app
#TENANT_ID=<tenant id>

app_config.py 中引用了这些环境变量:

import os

# 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")

# AUTHORITY = "https://login.partner.microsoftonline.cn/common"  # For multi-tenant app
AUTHORITY = f"https://login.partner.microsoftonline.cn/{os.getenv('TENANT_ID', 'common')}"

REDIRECT_PATH = "/getAToken"  # Used for forming an absolute URL to your redirect URI.
# The absolute URL must match the redirect URI you set
# in the app's registration in the Azure portal.

ENDPOINT = 'https://microsoftgraph.chinacloudapi.cn/v1.0/users'  # This resource requires no admin consent

# You can find the proper permission names from this document
# https://docs.microsoft.com/en-us/graph/permissions-reference
SCOPE = ["User.ReadBasic.All"]

# Tells the Flask-session extension to store sessions in the filesystem
SESSION_TYPE = "filesystem"
# Using the file system will not work in most production systems,
# it's better to use a database-backed session store instead.

永远不要将 .env 文件签入源代码管理,因为它包含机密。 快速入门示例包含阻止签入 .env 文件的 .gitignore 文件。

# Environments
.env

初始化代码

初始化代码的差异与平台相关。 对于 ASP.NET Core 和 ASP.NET,用户登录将委托给 OpenID Connect 中间件来完成。 ASP.NET 或 ASP.NET Core 模板会为 Azure AD v1.0 终结点生成 Web 应用程序。 只需进行一些配置就能使这些应用程序适应 Microsoft 标识平台。

Python 示例是使用 Flask 框架生成的,但也可以使用 Django 等其他框架。 Flask 应用使用 app.py 顶部的应用配置进行初始化:

import identity
import identity.web
import requests
from flask import Flask, redirect, render_template, request, session, url_for
from flask_session import Session

import app_config

app = Flask(__name__)
app.config.from_object(app_config)
Session(app)

然后,代码使用auth构造 对象。

auth = identity.web.Auth(
    session=session,
    authority=app.config.get("AUTHORITY"),
    client_id=app.config["CLIENT_ID"],
    client_credential=app.config["CLIENT_SECRET"],
)

下一步