使用用户名和密码进行验证时如何获取 ID 令牌?

Posted

技术标签:

【中文标题】使用用户名和密码进行验证时如何获取 ID 令牌?【英文标题】:How Can I get an ID Token while validating using Username and Password? 【发布时间】:2020-02-01 04:37:13 【问题描述】:

我正在使用 Python ADAL 库对使用 Azure Active Directory 的用户进行身份验证。我成功收到访问令牌后身份验证。现在,我想验证访问令牌的有效性。在这种情况下,我需要 ID_TOKEN。如何获得?

import adal
auth_context = adal.AuthenticationContext("https://login.microsoftonline.com/tenant_id")
token_response = auth_context.acquire_token_with_username_password("https://management.core.windows.net/", username, password, client_id)        

在令牌响应中,我得到了 access_token 和 refresh_token,但没有收到 id_token。在一个类似的问题之后,How to verify JWT id_token produced by MS Azure AD? 我使用代码来验证访问令牌,但我需要 ID_TOKEN。

任何关于获得这个的想法都会很棒。

【问题讨论】:

【参考方案1】:

不用ID_TOKEN,试试下面的代码。

import adal
import jwt

auth_context = adal.AuthenticationContext("https://login.microsoftonline.com/tenant_id")
token_response = auth_context.acquire_token_with_username_password("https://management.core.windows.net/", username, password, client_id)

token_header = jwt.get_unverified_header(token_response['accessToken'])

更多详情,你可以参考这个类似的issue和这个doc。

【讨论】:

我试过这个。它确实有效,但是即使我向令牌添加了一些随机值,它仍然会将这些标头发回给我。发生这种情况的任何原因? @RoshanJoeVincent 你做得怎么样?也许是这个问题?***.com/questions/57869775/…

以上是关于使用用户名和密码进行验证时如何获取 ID 令牌?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Keycloak 中使用手机号码对用户进行身份验证

如何在 identityserver4 中没有用户名和密码的情况下从令牌端点获取令牌?

通过使用 Symfony2 的 API 使用用户密码进行身份验证

身份验证后请求其他服务时如何从 JWT 令牌获取用户名?

使用用户名和密码获取谷歌身份验证令牌

是否可以使用 id 令牌进行电子邮件身份验证?