C#ADAL A的Python等价物AuthenticationContext.AcquireToken

2024-09-29 19:32:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我遵循一个tutorial通过AAD为powerbirestapi进行身份验证。在

本教程使用C和ADAL。它通过

AuthenticationContext authContext = new AuthenticationContext(authorityUri);
string token = authContext.AcquireToken(resourceUri, clientID, new Uri(redirectUri)).AccessToken;

我更喜欢使用Python,因此尝试使用ADAL library for Python。在

我可以通过

^{pr2}$

但是我找不到AcquireToken的等效Python ADAL函数。最近的选项似乎是context.acquire_token,但这需要我提供一个user_id参数,而C版本没有(它也不接受重定向URI参数)。在

如何在Python中获得与教程中的C代码相同的行为?在


Tags: token身份验证new参数string教程tutorialaad
3条回答

acquire-token函数在ADAL-Python中的用法差别不大。在adalpython中,您必须知道要遵循哪个身份验证流,然后使用适当的acquire令牌调用。您可以在Azure AD article中找到与应用程序类型和拓扑相关的不同身份验证流,以及在这些samples中对python的不同获取令牌调用的用法

在上面提到的场景中,您可以使用这个auth code flow示例。它需要一个客户端密码,但令牌是在用户交互登录后授予的。在

如果您仍然需要一个不提供客户机机密的交互式流,可以参考device code flow示例。然而,设备代码流主要用于没有交互式web界面的纯文本设备。用户可以使用另一个具有交互式web界面的设备进行登录。在

(我的意思是将此作为对Marcus's answer中的对话的注释,但是它太长了,不能放在那里)

感谢马库斯指出了一个工作样本和那篇博客文章。但值得指出的是:

  • 认证为应用程序和认证为最终用户之间存在巨大的概念差异。他们不能交换。似乎@JamesElderfield希望以交互方式对最终用户进行身份验证,在这种情况下,acquire_token_with_client_credentials(...)不是您要查找的droid。在
  • C{}的等价物大致上是ADAL Python中的acquire_token_with_authorization_code(...),但是确实,目前还没有,尽管在ADAL Python for native app(又称public client)中是already supported,但它需要应用程序开发人员实现自己的逻辑来启动HTTP服务器以捕获重定向的auth代码。在
  • 如果上面的选项对您来说太复杂了,那么您可以选择使用Device Code flow,这是由@abhidnya 's answer正确建议的。在

我通过遵循ADAL lib GitHub page中“Acquire token with client creds”部分中的示例来实现它。在

import adal
...
context = adal.AuthenticationContext("your_authority_uri")
token = context.acquire_token_with_client_credentials("your_resource_uri", _client_id, _client_secret)

一些样品here。在

这对你有用吗?在

相关问题 更多 >

    热门问题