获取Microsoft联合帐户上的访问令牌

时间:2018-11-14 13:23:06

标签: rest authentication azure-active-directory asp.net-core-2.0 powerbi

我正在尝试获取Power BI API的访问令牌。我们的帐户是联盟帐户。

我一直在尝试这种方法,但是它一直给我一个错误,提示用户名或密码不正确。为了使用资源所有者密码凭据授予流来获取Azure AD的访问令牌,我使用HttpClient直接调用http请求

HttpClient clie = new HttpClient();
string tokenEndpoint = "https://login.microsoftonline.com/{tenant}/oauth2/token";
var body = "resource=https://analysis.windows.net/powerbi/api&client_id={client_id}&grant_type=password&username={username}&password={password}";
var stringContent = new StringContent(body, Encoding.UTF8, "application/x-www-form-urlencoded");
string result = clie.PostAsync(tokenEndpoint, stringContent).ContinueWith((response) =>
            {
                return response.Result.Content.ReadAsStringAsync().Result;
            }).Result;

这将适用于非联合帐户。如何为联盟帐户实现相同的功能?

1 个答案:

答案 0 :(得分:0)

比较容易的是利用MSAL.NET(或ADAL.NET)来达到此目的。参见https://aka.ms/msal-net-up

ContainerRequestContext

更好的是,如果您知道您的计算机已加入域或AAD,则可以使用集成Windows身份验证:https://aka.ms/msal-net-iwa

scopes = new string[]{ "https://analysis.windows.net/powerbi/api/Dashboard.Read.All"}
result = await app.AcquireTokenByUsernamePasswordAsync(scopes, "joe@contoso.com",
                                                       securePassword);

请注意,我建议使用MSAL.NET(而不是ADAM.NET),因为通过MSAL / NET / Azure AD v2.0终结点,PowerBI可以更好地控制权限范围: enter image description here

https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredAppsPreview的应用程序注册中查看“ API权限”标签