<p>您可以手动完成,请参阅我的另一个答案:<a href="https://stackoverflow.com/a/40844983/1658906">https://stackoverflow.com/a/40844983/1658906</a>。在</p>
<p>必须使用<code>grant_type=password</code>并调用<code>oauth2/token</code>端点。以下是用于身份验证的C版本:</p>
<pre><code>private async Task<string> GetAccessToken()
{
string tokenEndpointUri = Authority + "oauth2/token";
var content = new FormUrlEncodedContent(new []
{
new KeyValuePair<string, string>("grant_type", "password"),
new KeyValuePair<string, string>("username", Username),
new KeyValuePair<string, string>("password", Password),
new KeyValuePair<string, string>("client_id", ClientId),
new KeyValuePair<string, string>("client_secret", ClientSecret),
new KeyValuePair<string, string>("resource", PowerBiResourceUri)
}
);
using (var client = new HttpClient())
{
HttpResponseMessage res = await client.PostAsync(tokenEndpointUri, content);
string json = await res.Content.ReadAsStringAsync();
AzureAdTokenResponse tokenRes = JsonConvert.DeserializeObject<AzureAdTokenResponse>(json);
return tokenRes.AccessToken;
}
}
</code></pre>
<p>在请求中,您必须指定:</p>
<ol>
<li>用户名</li>
<li>密码</li>
<li>客户端ID</li>
<li>客户机密</li>
<li>资源URI</li>
</ol>