使用username& passowrd grant type获取OAuth2令牌

时间:2017-01-25 15:08:26

标签: python azure adal

我正在使用以下adal库来获取Oauth2令牌(AAD)。

https://github.com/AzureAD/azure-activedirectory-library-for-python

以下代码确实有效,我可以获取我的令牌: https://github.com/AzureAD/azure-activedirectory-library-for-python/blob/dev/sample/certificate_credentials_sample.py

但在我的具体情况下,我希望能够通过提供用户名和密码(密码授予类型)获取令牌

有什么想法吗?

谢谢,

2 个答案:

答案 0 :(得分:1)

没有详细记录,但最新的(0.4.4)

仍然可以使用用户/密码验证
context = adal.AuthenticationContext('https://login.microsoftonline.com/common')
context.acquire_token_with_username_password(
    'https://management.core.windows.net',
    'me@outlook.com',
    'password',
    '04b07795-8ddb-461a-bbee-02f9e1bf7b46')

参见参考:https://github.com/AzureAD/azure-activedirectory-library-for-python/blob/dev/adal/authentication_context.py#L128-L145

答案 1 :(得分:0)

由于某些原因,该库删除了使用用户名密码进行身份验证的可能性,最新版本。

然而,使用3.13.8.999这个版本的Microsoft.IdentityModel.Clients.ActiveDirectory nuget包,这不是最新的,但正是你需要的。

然后就像这样

string tenantname = ConfigurationManager.AppSettings["ida:Tenant"];
string clientId = ConfigurationManager.AppSettings["ida:ClientID"];

string authority = $"https://login.microsoftonline.com/{tenantname}";
var authenticationContext = new AuthenticationContext(authority, null);

string username = $"{UserName}@{tenantname}";
var userCred = new UserPasswordCredential(username, Password);

 AuthenticationResult authResult = await   authenticationContext.AcquireTokenAsync(clientId, clientId, userCred);

希望这就是你要找的东西。