这是使用MSAL for python使用id_token_声明对web应用的用户进行身份验证的正确方法吗? 背景:

这是使用MSAL for python使用id_token_声明对web应用的用户进行身份验证的正确方法吗? 背景:,python,azure-active-directory,msal,Python,Azure Active Directory,Msal,我已成功安装。此示例使用Azure AD中的Microsoft Graph API权限,要求用户给予同意,并获得与以下类似的预期结果: { "token_type": "Bearer", "access_token": "eyJ0...", "refresh_token": "OAQ...", "id_token": "eyJ...", ... "id_token_claims": { "aud": "289...",

我已成功安装。此示例使用Azure AD中的Microsoft Graph API权限,要求用户给予同意,并获得与以下类似的预期结果:

{
    "token_type": "Bearer",
    "access_token": "eyJ0...",
    "refresh_token": "OAQ...",
    "id_token": "eyJ...",
    ...

    "id_token_claims": {
        "aud": "289...",
        "iss": "https://login.microsoftonline.com/f645ad92-e38d-4d1a-b510-d1b09a74a8ca/v2.0",
        "iat": 1559626249,
        "nbf": 1559626249,
        "exp": 1559630149,
        "aio": "ATQ...",
        "name": "Cloud IDLAB Basic User",
        "oid": "9f4...",
        "preferred_username": "idlab@msidlab4.onmicrosoft.com",
        "sub": "4mB...",
        "tid": "f64...",
        "uti": "91H...",
        "ver": "2.0"
    }
}
我的配置与示例代码相同,但使用我自己的Azure AD
client\u secret
client\u id

{
    "authority": "https://login.microsoftonline.com/organizations",
    "client_id": "my_client_id",
    "scope": ["https://graph.microsoft.com/.default"],
    "redirect_uri": "http://localhost:5000/getAToken",
    "client_secret": "mysecret"
}
目标: 我希望只使用MSAL对用户进行身份验证。在这种情况下。多亏了MSAL,我可以使用结果中的
id\u token\u索赔
(参见上面的示例),这是最重要的

问题: 这是使用MSAL对用户进行身份验证的正确方法吗?我不需要
访问令牌,因为我不想调用任何其他API

我发出的请求在其响应中包含microsoft graph的“access_token”,但没有调用graph api(如本文所述),这感觉有点奇怪


MSAL归还任何人可能需要的东西,无论他们是否使用,这可能是完全合法的。我只是想确保我正确地使用了MSAL。也许我的范围应该不同(例如,我的)?

这是验证用户身份并理解用户可能感到奇怪的原因的正确方法

获取访问令牌、ID令牌和刷新令牌的原因是您使用的流。我的建议是审查流程,以便更好地了解身份验证过程是如何工作的,以及将相应地返回什么

见此处的官方文件:

有关Python MSAL库的详细信息,请参见:

我还想澄清ADAL和MSAL是不同的库,因为MSAL库访问V2.0端点,而ADAL使用v1.0端点

文档中还描述了许多不同的身份验证类型和场景:

其中一个描述了仅返回ID_令牌的场景。然而,这里的问题是,到目前为止,我不相信Python MSAL库已经正确地实现了这个流

因此,如果您正在获取一个没有任何权限的访问令牌,并且您正在使用所述Python MSAL库获取ID_令牌,那么该解决方案应该适合您的应用程序验证用户是他们所说的用户

但是,如果您正试图更接近规范并有一个更干净的实现,那么您可能希望探索每个Microsoft文档中可用的不同OAuth2流


除此之外,RFC还更详细地描述了OAuth2协议

谢谢你的信息!似乎python的MSAL直接实现了OAuth 2.0身份验证代码流。没有提供带有OpenID Connect的signin auth流,而是根据(Web App应用程序类型)[提供单独的OAauth 2.0 auth代码流。因此,使用MSAL for python,我获得了access_令牌,在我的情况下,我不需要它。路线图上说,让每个可能的使用场景都包含在一个示例中。标记为完成。这似乎是预期的行为(即,使用OAuth 2.0授权代码流来实现这两种方案)在与一些伟大的ppl进行了更多的挖掘和讨论之后&如上所述,有很多流程&但只能做到这么多。它目前没有一个简单的OpenID登录流程,但身份验证代码流实现对我来说是可行的&我喜欢知道这不是一种错误的方式。