ClientApplication 类

通常不直接使用此类。 请改用其子类: PublicClientApplicationConfidentialClientApplication

创建应用程序的实例。

构造函数

ClientApplication(client_id, client_credential=None, authority=None, validate_authority=True, token_cache=None, http_client=None, verify=True, proxies=None, timeout=None, client_claims=None, app_name=None, app_version=None, client_capabilities=None, azure_region=None, exclude_scopes=None, http_cache=None, instance_discovery=None, allow_broker=None, enable_pii_log=None, oidc_authority=None)

参数

名称 说明
client_id
必需
str

在Microsoft Entra 管理中心上注册应用后,应用具有client_id。

client_credential

对于 PublicClientApplication,请在此处使用 None

因此 ConfidentialClientApplication,它支持针对不同方案的许多不同输入格式。

支持使用客户端密码。只需在字符串中馈送,例如 "your client secret"

支持在 X.509 (.pem) formatDeprecated 中使用证书,因为它使用 SHA-1 指纹,

除非你仍在使用仅支持 SHA-1 指纹的 ADFS。 请使用本页后面介绍的 .pfx 选项。以以下形式以听写形式提供源:


   {
       "private_key": "...-----BEGIN PRIVATE KEY-----... in PEM format",
       "thumbprint": "An SHA-1 thumbprint such as A1B2C3D4E5F6..."
           "Changed in version 1.35.0, if thumbprint is absent"
           "and a public_certificate is present, MSAL will"
           "automatically calculate an SHA-256 thumbprint instead.",
       "passphrase": "Needed if the private_key is encrypted (Added in version 1.6.0)",
       "public_certificate": "...-----BEGIN CERTIFICATE-----...",  # Needed if you use Subject Name/Issuer auth. Added in version 0.5.0.
   }

MSAL Python需要 PEM 格式的“private_key”。 如果证书采用 PKCS12 (.pfx) 格式,则可以按以下方式openssl pkcs12 -in file.pfx -out file.pem -nodes将其转换为 X.509 (.pem) 格式。指纹可在应用的注册Azure 门户中使用。 或者,可以 计算指纹public_certificate (可选)是通过“x5c”JWT 标头发送的公钥证书。 如果使用 使用者名称/颁发者身份验证 ,这是一种允许更轻松地轮换证书的方法,这非常有用。 根据 规格,“包含与用于对 JWS 进行数字签名的密钥对应的公钥的证书必须是第一个证书。 这后跟其他证书,每个后续证书都是用于认证上一个证书的证书。但是,证书的颁发者可能会使用不同的顺序。 因此,如果尝试最终出现错误AADSTS700027 - “提供的签名值与预期的签名值不匹配”,则可以尝试仅使用叶证书(以 PEM/str 格式)。

支持从版本 1.13.0 中添加的其他位置获取的原始断言:

它也可以是你自己组装的完全预签名断言。 只需传递仅包含密钥“client_assertion”的容器,如下所示:


   {
       "client_assertion": "...a JWT with claims aud, exp, iss, jti, nbf, and sub..."
   }

支持从 PFX 文件读取客户端证书。在版本 1.29.0 中添加

包含 PFX 文件路径的字典中的源:


   {
       "private_key_pfx_path": "/path/to/your.pfx",  # Added in version 1.29.0
       "public_certificate": True,  # Only needed if you use Subject Name/Issuer auth. Added in version 1.30.0
       "passphrase": "Passphrase if the private_key is encrypted (Optional)",
   }

以下命令将从.key和 .pem 文件生成 .pfx 文件:


   openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.pem

使用者名称/颁发者身份验证 是一种允许更轻松地轮换证书的方法。 如果 .pfx 文件同时包含私钥和公共证书,则可以通过将“public_certificate”设置为 True“来选择”使用者名称/颁发者身份验证”。

默认值: None
client_claims

在版本 0.5.0 中添加:它是由此 ConfidentialClientApplication 私钥签名的额外声明字典。 例如,可以使用 {“client_ip”: “x.x.x.x”}。 还可以替代以下任何默认声明:


   {
       "aud": the_token_endpoint,
       "iss": self.client_id,
       "sub": same_as_issuer,
       "exp": now + 10_min,
       "iat": now,
       "jti": a_random_uuid
   }
默认值: None
authority
str

标识令牌颁发机构的 URL。 它应采用格式 https://login.microsoftonline.com/your_tenant 默认情况下,我们将使用 https://login.microsoftonline.com/common

版本 1.17 中已更改:也可以使用预定义常量和生成器,如下所示:


   from msal.authority import (
       AuthorityBuilder,
       AZURE_US_GOVERNMENT, AZURE_CHINA, AZURE_PUBLIC)
   my_authority = AuthorityBuilder(AZURE_PUBLIC, "contoso.onmicrosoft.com")
   # Now you get an equivalent of
   # "https://login.microsoftonline.com/contoso.onmicrosoft.com"

   # You can feed such an authority to msal's ClientApplication
   from msal import PublicClientApplication
   app = PublicClientApplication("my_client_id", authority=my_authority, ...)
默认值: None
validate_authority

(可选)打开或关闭颁发机构验证。 此参数默认为 true。

默认值: True
token_cache

设置此 ClientApplication 实例使用的令牌缓存。 默认情况下,将创建和使用内存中缓存。

默认值: None
http_client

(可选)抽象类 HttpClient <的实现msal.oauth2cli.http.http_client> 请求会话实例的默认值。 由于 MSAL 1.11.0,因此将默认会话配置为尝试在连接错误时重试一次。 如果提供自己的http_client,则http_client负责决定是否执行重试。

默认值: None
verify

(可选)它将传递给 基础请求库中的 verify 参数 。如果选择传递自己的 Http 客户端,则此参数不适用

默认值: True
proxies

(可选)它将传递到 基础请求库中的代理参数 。如果选择传递自己的 Http 客户端,则此参数不适用

默认值: None
timeout

(可选)它将传递给 基础请求库中的超时参数 。如果选择传递自己的 Http 客户端,则不适用

默认值: None
app_name

(可选)可以为Microsoft遥测目的提供应用程序名称。 默认值为 None,表示不会传递给Microsoft。

默认值: None
app_version

(可选)可以为Microsoft遥测目的提供应用程序版本。 默认值为 None,表示不会传递给Microsoft。

默认值: None
client_capabilities

(可选)允许配置一个或多个客户端功能,例如 [“CP1”]。

客户端功能旨在通知Microsoft 标识平台(STS)此客户端的功能,以便 STS 可以决定启用某些功能。 例如,如果客户端能够处理 声明质询,STS 可能会向资源发出 持续访问评估(CAE) 访问令牌,知道当资源发出 声明质询 时,客户端将能够处理这些质询。

实现详细信息:客户端功能目前使用网络上的“声明”参数实现。 MSAL 会将它们合并为 声明参数 ,稍后会通过某个获取令牌请求提供这些参数。

默认值: None
azure_region
str

(可选)指示 MSAL 使用 Entra 区域令牌服务。 此旧功能仅适用于第一方应用程序。 仅支持 acquire_token_for_client()

支持 4 个值:

  1. azure_region=None - 此默认值表示未配置任何区域。 MSAL 将使用 env var MSAL_FORCE_REGION中定义的区域。

  2. azure_region="some_region" - 表示使用指定的区域。

  3. azure_region=True - 这意味着 MSAL 将尝试自动检测区域。 不建议这样做。

  4. azure_region=False - 这意味着 MSAL 不使用任何区域。

注释

区域自动发现已在 VM 和 Azure Functions 上进行测试。 这是不可靠的。

使用此选项的应用程序应配置短超时。

有关更多详细信息和区域字符串的值

看到 https://mms.heiai.top/entra/msal/dotnet/resources/region-discovery-troubleshooting

版本 1.12.0 中的新增功能。

默认值: None
exclude_scopes

(可选)从历史上看,MSAL 硬编码 offline_access 范围,这将使你的应用能够长时间访问用户的数据。 如果应用不必要或不需要,现在可以使用此参数提供范围排除列表,例如 exclude_scopes = ["offline_access"]

默认值: None
http_cache

MSAL 长期以来一直在缓存令牌 token_cache。 最近,MSAL 还引入了一种概念http_cache,即自动缓存一些有限数量的非令牌 http 响应,以便在PublicClientApplicationConfidentialClientApplication某些情况下具有更高的性能和响应能力。

此参数 http_cache 接受任何类似于听写的对象。 如果未提供,MSAL 将使用内存中听写。

如果应用是命令行应用(CLI),则希望在不同的 CLI 运行中保留http_cache。 持久化文件格式可能会因 不稳定协议(包括但不限于)而更改,因此实现应容忍意外加载错误。 以下食谱显示了一种执行此操作的方法:


   # Just add the following lines at the beginning of your CLI script
   import sys, atexit, pickle, logging
   http_cache_filename = sys.argv[0] + ".http_cache"
   try:
       with open(http_cache_filename, "rb") as f:
           persisted_http_cache = pickle.load(f)  # Take a snapshot
   except (
           FileNotFoundError,  # Or IOError in Python 2
           pickle.UnpicklingError,  # A corrupted http cache file
           AttributeError,  # Cache created by a different version of MSAL
           ):
       persisted_http_cache = {}  # Recover by starting afresh
   except:  # Unexpected exceptions
       logging.exception("You may want to debug this")
       persisted_http_cache = {}  # Recover by starting afresh
   atexit.register(lambda: pickle.dump(
       # When exit, flush it back to the file.
       # It may occasionally overwrite another process's concurrent write,
       # but that is fine. Subsequent runs will reach eventual consistency.
       persisted_http_cache, open(http_cache_file, "wb")))

   # And then you can implement your app as you normally would
   app = msal.PublicClientApplication(
       "your_client_id",
       ...,
       http_cache=persisted_http_cache,  # Utilize persisted_http_cache
       ...,
       #token_cache=...,  # You may combine the old token_cache trick
           # Please refer to token_cache recipe at
           # https://msal-python.readthedocs.io/en/latest/#msal.SerializableTokenCache
       )
   app.acquire_token_interactive(["your", "scope"], ...)

里面 http_cache 的内容是廉价获得的。 无需在不同的应用之间共享它们。

内部 http_cache 内容不包含令牌或个人身份信息(PII)。 加密是不必要的。

版本 1.16.0 中的新增功能。

默认值: None
instance_discovery
<xref:boolean>

从历史上看,MSAL 将连接到位于获取 https://login.microsoftonline.com 某些元数据的中央终结点,尤其是在使用不熟悉的颁发机构时。 此行为称为实例发现。

此参数默认为 None,这将启用实例发现。

如果你知道一些允许 MSAL 使用 as-is操作的颁发机构,而不涉及任何实例发现,建议的模式是:


   known_authorities = frozenset([  # Treat your known authorities as const
       "https://contoso.com/adfs", "https://login.azs/foo"])
   ...
   authority = "https://contoso.com/adfs"  # Assuming your app will use this
   app1 = PublicClientApplication(
       "client_id",
       authority=authority,
       # Conditionally disable Instance Discovery for known authorities
       instance_discovery=authority not in known_authorities,
       )

如果你事先不知道某些颁发机构,但仍希望 MSAL 接受你提供的任何授权,则可以使用 a False 无条件地禁用实例发现。

版本 1.19.0 中的新增功能。

默认值: None
allow_broker
<xref:boolean>

Deprecated. 请改用 enable_broker_on_windows

默认值: None
enable_pii_log
<xref:boolean>

启用后,日志可能包括 PII(个人身份信息)。 这在排查代理行为时很有用。 默认行为为 False。

版本 1.24.0 中的新增功能。

默认值: None
oidc_authority
str

在版本 1.28.0 中添加:它是标识格式 https://contoso.com/tenant的 OpenID Connect (OIDC) 颁发机构的 URL。 MSAL 会将“.known/openid-configuration”追加到颁发机构,并从那里检索 OIDC 元数据,以找出终结点。

注意:代理将不用于 OIDC 颁发机构。

默认值: None

方法

acquire_token_by_auth_code_flow

验证要重定向回的身份验证响应,并获取令牌。

它自动提供 nonce 保护。

acquire_token_by_authorization_code

授权代码授予的后半部分。

acquire_token_by_refresh_token

基于从其他位置获取的刷新令牌(RT)获取令牌。

仅当从其他位置具有旧的 RT,现在想要将它们迁移到 MSAL 时,才使用此方法。 调用此方法会导致新令牌自动存储到 MSAL 中。

如果已在使用 MSAL,则无需使用此方法。 MSAL 在其令牌缓存内自动维护 RT,并在调用 acquire_token_silent时检索访问令牌。

acquire_token_by_username_password

通过用户凭据获取给定资源的令牌。

有关用户名密码流的约束,请参阅此页面。 https://github.com/AzureAD/microsoft-authentication-library-for-python/wiki/Username-Password-Authentication

[已弃用]此 API 已弃用用于公共客户端流,将在将来的版本中删除。 请改用更安全的流。 迁移指南: https://aka.ms/msal-ropc-migration

acquire_token_silent

获取给定帐户的访问令牌,而无需用户交互。

它具有与 . acquire_token_silent_with_error. 相同的参数。 区别在于返回值的行为。 此方法将缓存空和刷新错误合并为一个返回值 None。 如果应用在令牌缓存查找过程中不关心确切的令牌刷新错误,则此方法更简单,建议使用此方法。

acquire_token_silent_with_error

获取给定帐户的访问令牌,而无需用户交互。

可以通过从缓存中查找有效的访问令牌或从缓存中查找有效的刷新令牌,然后自动使用它来兑换新的访问令牌来完成。

此方法会将缓存与令牌刷新错误区分开来。 如果应用在令牌缓存查找过程中处理确切的令牌刷新错误,则此方法适用。 否则,建议使用其他方法 acquire_token_silent

get_accounts

获取以前登录的帐户列表,即缓存中存在。

稍后可以使用 acquire_token_silent 帐户查找其令牌。

get_authorization_request_url

构造用于启动授权代码授予的 URL。

initiate_auth_code_flow

启动身份验证代码流。

稍后,当响应到达redirect_uri时,可以使用 acquire_token_by_auth_code_flow 它来完成身份验证/授权。

is_pop_supported

如果此客户端支持所有权证明访问令牌,则返回 True。

remove_account

注销并忘记令牌缓存中的我

acquire_token_by_auth_code_flow

验证要重定向回的身份验证响应,并获取令牌。

它自动提供 nonce 保护。

acquire_token_by_auth_code_flow(auth_code_flow, auth_response, scopes=None, **kwargs)

参数

名称 说明
auth_code_flow
必需

返回 initiate_auth_code_flow的同一听写。

auth_response
必需

从身份验证服务器接收的查询字符串的听写。

scopes

请求访问受保护 API 的范围(资源)。

大多数时候,你可以将其留空。

如果请求用户同意多个资源,则需要在此处提供所需 initiate_auth_code_flow资源的子集。

OAuth2 主要用于单一实例服务,其中令牌始终用于同一资源,并且唯一的更改位于范围中。 在Microsoft Entra中,可以为多个第三方资源颁发令牌。 可以向多个资源请求授权代码,但兑换时,令牌仅适用于一个目标收件人(称为受众)。 因此,开发人员需要指定一个范围,以便我们可以限制要为相应受众颁发的令牌。

默认值: None

返回

类型 说明
  • 包含“access_token”和/或“id_token”的听写,具体取决于使用的范围。 (请参阅 https://tools.ietf.org/html/rfc6749#section-5.1

  • 包含“error”、“error_description”、“error_uri”的听写。 (要么是这样,要么是这样

  • 大多数客户端数据错误都会导致 ValueError 异常。 因此,使用模式可能没有任何协议详细信息:

    
       def authorize():  # A controller in a web app
           try:
               result = msal_app.acquire_token_by_auth_code_flow(
                   session.get("flow", {}), request.args)
               if "error" in result:
                   return render_template("error.html", result)
               use(result)  # Token(s) are available in result and cache
           except ValueError:  # Usually caused by CSRF
               pass  # Simply ignore them
           return redirect(url_for("index"))
    

acquire_token_by_authorization_code

授权代码授予的后半部分。

acquire_token_by_authorization_code(code, scopes, redirect_uri=None, nonce=None, claims_challenge=None, **kwargs)

参数

名称 说明
code
必需

授权服务器返回的授权代码。

scopes
必需

(必需)请求访问受保护 API 的范围(资源)。

如果请求用户同意多个资源,通常会在此处提供 AuthCode 中所需的部分内容。

OAuth2 主要用于单一实例服务,其中令牌始终用于同一资源,并且唯一的更改位于范围中。 在Microsoft Entra中,可以为多个第三方资源颁发令牌。 可以向多个资源请求授权代码,但兑换时,令牌仅适用于一个目标收件人(称为受众)。 因此,开发人员需要指定一个范围,以便我们可以限制要为相应受众颁发的令牌。

nonce

如果在调用 get_authorization_request_url时提供了 nonce,则还应在此处提供相同的 nonce,以便我们将对其进行验证。 如果 ID 令牌中的 nonce 不匹配,将引发异常。

默认值: None
claims_challenge

claims_challenge参数请求资源提供程序以 www-authenticate 标头中claims_challenge指令的形式请求的特定声明,这些声明将从 UserInfo 终结点和/或 ID 令牌和/或访问令牌中返回。 它是 JSON 对象的字符串,其中包含从这些位置请求的声明列表。

默认值: None
redirect_uri
默认值: None

返回

类型 说明

表示来自Microsoft Entra的 json 响应的听写:

  • 成功的响应将包含“access_token”密钥,

  • 错误响应将包含“error”和通常为“error_description”。

acquire_token_by_refresh_token

基于从其他位置获取的刷新令牌(RT)获取令牌。

仅当从其他位置具有旧的 RT,现在想要将它们迁移到 MSAL 时,才使用此方法。 调用此方法会导致新令牌自动存储到 MSAL 中。

如果已在使用 MSAL,则无需使用此方法。 MSAL 在其令牌缓存内自动维护 RT,并在调用 acquire_token_silent时检索访问令牌。

acquire_token_by_refresh_token(refresh_token, scopes, **kwargs)

参数

名称 说明
refresh_token
必需
str

旧的刷新令牌,作为字符串。

scopes
必需

范围与此旧 RT 相关联。 每个范围都需要采用 Microsoft 标识平台 (v2) 格式。 请参阅 “范围”而不是资源

返回

类型 说明
  • 当发生错误时,听写包含“error”和其他一些键。

  • 听写不包含“error”键意味着迁移成功。

acquire_token_by_username_password

通过用户凭据获取给定资源的令牌。

有关用户名密码流的约束,请参阅此页面。 https://github.com/AzureAD/microsoft-authentication-library-for-python/wiki/Username-Password-Authentication

[已弃用]此 API 已弃用用于公共客户端流,将在将来的版本中删除。 请改用更安全的流。 迁移指南: https://aka.ms/msal-ropc-migration

acquire_token_by_username_password(username, password, scopes, claims_challenge=None, auth_scheme=None, **kwargs)

参数

名称 说明
username
必需
str

通常采用电子邮件地址形式的 UPN。

password
必需
str

密码。

scopes
必需

请求访问受保护 API 的范围(资源)。

claims_challenge

claims_challenge参数请求资源提供程序以 www-authenticate 标头中claims_challenge指令的形式请求的特定声明,这些声明将从 UserInfo 终结点和/或 ID 令牌和/或访问令牌中返回。 它是 JSON 对象的字符串,其中包含从这些位置请求的声明列表。

默认值: None
auth_scheme

你可以提供一个 msal.auth_scheme.PopAuthScheme 对象,以便 MSAL 将为你获取所有权证明(POP)令牌。

版本 1.26.0 中的新增功能。

默认值: None

返回

类型 说明

表示来自Microsoft Entra的 json 响应的听写:

  • 成功的响应将包含“access_token”密钥,

  • 错误响应将包含“error”和通常为“error_description”。

acquire_token_silent

获取给定帐户的访问令牌,而无需用户交互。

它具有与 . acquire_token_silent_with_error. 相同的参数。 区别在于返回值的行为。 此方法将缓存空和刷新错误合并为一个返回值 None。 如果应用在令牌缓存查找过程中不关心确切的令牌刷新错误,则此方法更简单,建议使用此方法。

acquire_token_silent(scopes, account, authority=None, force_refresh=False, claims_challenge=None, auth_scheme=None, **kwargs)

参数

名称 说明
scopes
必需
account
必需
authority
默认值: None
force_refresh
默认值: False
claims_challenge
默认值: None
auth_scheme
默认值: None

返回

类型 说明
  • 不包含“error”键的听写,如果缓存查找成功,则通常包含“access_token”键。

  • 缓存查找不生成令牌时,无。

acquire_token_silent_with_error

获取给定帐户的访问令牌,而无需用户交互。

可以通过从缓存中查找有效的访问令牌或从缓存中查找有效的刷新令牌,然后自动使用它来兑换新的访问令牌来完成。

此方法会将缓存与令牌刷新错误区分开来。 如果应用在令牌缓存查找过程中处理确切的令牌刷新错误,则此方法适用。 否则,建议使用其他方法 acquire_token_silent

acquire_token_silent_with_error(scopes, account, authority=None, force_refresh=False, claims_challenge=None, auth_scheme=None, **kwargs)

参数

名称 说明
scopes
必需

(必需)请求访问受保护 API 的范围(资源)。

account
必需

(必需)返回 get_accounts的帐户对象之一。 从 MSAL Python 1.23 开始,输入None将成为 NO-OP,并且始终返回None

force_refresh

如果为 True,它将跳过访问令牌查找,并尝试查找刷新令牌以获取新的访问令牌。

默认值: False
claims_challenge

claims_challenge参数请求资源提供程序以 www-authenticate 标头中claims_challenge指令的形式请求的特定声明,这些声明将从 UserInfo 终结点和/或 ID 令牌和/或访问令牌中返回。 它是 JSON 对象的字符串,其中包含从这些位置请求的声明列表。

默认值: None
auth_scheme

你可以提供一个 msal.auth_scheme.PopAuthScheme 对象,以便 MSAL 将为你获取所有权证明(POP)令牌。

版本 1.26.0 中的新增功能。

默认值: None
authority
默认值: None

返回

类型 说明
  • 不包含“error”键的听写,如果缓存查找成功,则通常包含“access_token”键。

  • 当缓存中没有令牌时,无。

  • 令牌刷新失败时,包含“error”密钥的听写。

get_accounts

获取以前登录的帐户列表,即缓存中存在。

稍后可以使用 acquire_token_silent 帐户查找其令牌。

get_accounts(username=None)

参数

名称 说明
username

仅筛选具有此用户名的帐户。 不区分大小写。

默认值: None

返回

类型 说明

帐户对象列表。 每个帐户都是一个听写。 目前,我们仅记录其“用户名”字段。 你的应用可以选择向最终用户显示这些信息,并允许用户选择其帐户之一继续。

get_authorization_request_url

构造用于启动授权代码授予的 URL。

get_authorization_request_url(scopes, login_hint=None, state=None, redirect_uri=None, response_type='code', prompt=None, nonce=None, domain_hint=None, claims_challenge=None, **kwargs)

参数

名称 说明
scopes
必需

(必需)请求访问受保护 API 的范围(资源)。

state
str

OAuth2 建议用于 CSRF 保护。

默认值: None
login_hint
str

用户的标识符。 通常为用户主体名称(UPN)。

默认值: None
redirect_uri
str

从颁发机构收到响应时要返回到的地址。

默认值: None
response_type
str

对于 OAuth2 授权代码授予,默认值为“code”。

可以使用其他内容,例如“id_token”或“token”,这会触发隐式授权,但 不建议这样做。

默认值: code
prompt
str

默认情况下,不会发送任何提示值,甚至不会发送字符串 "none"。 必须显式指定值。 其有效值为在 . 中 <xref:msal.Prompt>定义的常量。

默认值: None
nonce

用于缓解重播攻击的加密随机值。 另请参阅 OIDC 规范

默认值: None
domain_hint

可以是“使用者”或“组织”之一,也可以是租户域“contoso.com”。 如果包含,它将跳过用户在登录页面上经历的基于电子邮件的发现过程,从而导致略微简化的用户体验。 有关 Auth Code Flow 文档domain_hint 文档中可用的可能值的详细信息。

默认值: None
claims_challenge

claims_challenge参数请求资源提供程序以 www-authenticate 标头中claims_challenge指令的形式请求的特定声明,这些声明将从 UserInfo 终结点和/或 ID 令牌和/或访问令牌中返回。 它是 JSON 对象的字符串,其中包含从这些位置请求的声明列表。

默认值: None

返回

类型 说明

作为字符串的授权 URL。

initiate_auth_code_flow

启动身份验证代码流。

稍后,当响应到达redirect_uri时,可以使用 acquire_token_by_auth_code_flow 它来完成身份验证/授权。

initiate_auth_code_flow(scopes, redirect_uri=None, state=None, prompt=None, login_hint=None, domain_hint=None, claims_challenge=None, max_age=None, response_mode=None)

参数

名称 说明
scopes
必需

它是区分大小写的字符串列表。

redirect_uri
str

Optional. 如果未指定,服务器将使用预注册的服务器。

默认值: None
state
str

客户端用来维护请求和回调之间的状态的不透明值。 如果不存在,此库将在内部自动生成一个库。

默认值: None
prompt
str

默认情况下,不会发送任何提示值,甚至不会发送字符串 "none"。 必须显式指定值。 其有效值为在 . 中 <xref:msal.Prompt>定义的常量。

默认值: None
login_hint
str

Optional. 用户的标识符。 通常为用户主体名称(UPN)。

默认值: None
domain_hint

可以是“使用者”或“组织”之一,也可以是租户域“contoso.com”。 如果包含,它将跳过用户在登录页面上经历的基于电子邮件的发现过程,从而导致略微简化的用户体验。 有关 Auth Code Flow 文档domain_hint 文档中可用的可能值的详细信息。

默认值: None
max_age
int

可选。 最大身份验证期限。 指定自上次对 End-User 主动进行身份验证以来允许的运行时间(以秒为单位)。 如果已用时间大于此值,Microsoft 标识平台将主动重新对最终用户进行身份验证。

MSAL Python还会自动验证 ID 令牌中的auth_time。

版本 1.15 中的新增功能。

默认值: None
response_mode
str

可选。 指定应返回响应参数的方法。 默认值等效query于 MSAL Python中仍然足够安全(因为 MSAL Python首先不会通过查询参数传输令牌)。 为了获得更好的安全性,我们建议使用该值 form_post。 在“form_post”模式下,响应参数将编码为 HTML 表单值,这些值通过 HTTP POST 方法传输,并使用 application/x-www-form-urlencoded 格式在正文中编码。 有效值可以是 HTTP POST 到回调 URI 的“form_post”,也可以是 HTTP GET 的“default”(默认值),其参数在查询字符串中编码。 有关此处https://openid.net/specs/oauth-v2-multiple-response-types-1_0.html#ResponseModes此处https://openid.net/specs/oauth-v2-form-post-response-mode-1_0.html#FormPostResponseMode可能值的详细信息

注释

应将 Web 框架配置为接受form_post响应,而不是查询响应。

虽然此参数仍然有效,但在将来的版本中将删除此参数。

使用基于查询的响应模式不太安全,应避免使用。

默认值: None
claims_challenge
默认值: None

返回

类型 说明

身份验证代码流。 它是以下形式的听写:


   {
       "auth_uri": "https://...",  // Guide user to visit this
       "state": "...",  // You may choose to verify it by yourself,
                        // or just let acquire_token_by_auth_code_flow()
                        // do that for you.
       "...": "...",  // Everything else are reserved and internal
   }

调用方应:

  1. 不知何故将此内容存储在当前会话中,

  2. 指导最终用户(即资源所有者)访问该auth_uri,

  3. 然后将此听写和后续身份验证响应中继到 acquire_token_by_auth_code_flow

is_pop_supported

如果此客户端支持所有权证明访问令牌,则返回 True。

is_pop_supported()

remove_account

注销并忘记令牌缓存中的我

remove_account(account)

参数

名称 说明
account
必需

属性

ACQUIRE_TOKEN_BY_AUTHORIZATION_CODE_ID

ACQUIRE_TOKEN_BY_AUTHORIZATION_CODE_ID = '832'

ACQUIRE_TOKEN_BY_DEVICE_FLOW_ID

ACQUIRE_TOKEN_BY_DEVICE_FLOW_ID = '622'

ACQUIRE_TOKEN_BY_REFRESH_TOKEN

ACQUIRE_TOKEN_BY_REFRESH_TOKEN = '85'

ACQUIRE_TOKEN_BY_USERNAME_PASSWORD_ID

ACQUIRE_TOKEN_BY_USERNAME_PASSWORD_ID = '301'

ACQUIRE_TOKEN_FOR_CLIENT_ID

ACQUIRE_TOKEN_FOR_CLIENT_ID = '730'

ACQUIRE_TOKEN_INTERACTIVE

ACQUIRE_TOKEN_INTERACTIVE = '169'

ACQUIRE_TOKEN_ON_BEHALF_OF_ID

ACQUIRE_TOKEN_ON_BEHALF_OF_ID = '523'

ACQUIRE_TOKEN_SILENT_ID

ACQUIRE_TOKEN_SILENT_ID = '84'

ATTEMPT_REGION_DISCOVERY

ATTEMPT_REGION_DISCOVERY = True

DISABLE_MSAL_FORCE_REGION

DISABLE_MSAL_FORCE_REGION = False

GET_ACCOUNTS_ID

GET_ACCOUNTS_ID = '902'

REMOVE_ACCOUNT_ID

REMOVE_ACCOUNT_ID = '903'