如果您不想「每次都填寫我的憑證」,則一種解決方法是使用Resource Owner Password Credentials Grant flow。此流程可以輕鬆獲得令牌。在控制檯應用程序中,您可以直接使用用戶帳戶和密碼獲取受保護的Web API的訪問令牌。下面的代碼是供你參考:
static void Main(string[] args)
{
test().Wait();
}
public static async Task test()
{
using (HttpClient client = new HttpClient())
{
var tokenEndpoint = @"https://login.windows.net/a703965c-e057-4bf6-bf74-1d7d82964996/oauth2/token";
var accept = "application/json";
client.DefaultRequestHeaders.Add("Accept", accept);
string postBody = @"resource=https%3A%2F%2Fgraph.microsoft.com%2F //here could be your own web api
&client_id=<client id>
&grant_type=password
&[email protected]
&password=<password>
&scope=openid";
using (var response = await client.PostAsync(tokenEndpoint, new StringContent(postBody, Encoding.UTF8, "application/x-www-form-urlencoded")))
{
if (response.IsSuccessStatusCode)
{
var jsonresult = JObject.Parse(await response.Content.ReadAsStringAsync());
var token = (string)jsonresult["access_token"];
}
}
}
}
但問題是,流量將直接在代碼中暴露的用戶名和密碼,它帶來潛在的攻擊的風險,以及我們會一直避免直接處理用戶憑據。因此,請確保您只是使用此流程在安全環境中進行測試。有關更多詳細信息,請參閱this article。
如果你走這條路線,請務必閱讀Vittorio的博客文章,瞭解此流程的侷限性:http://www.cloudidentity.com/blog/2014/07/08/using-adal-net-to-authenticate-用戶-通usernamepassword / – dstrockis