2017-08-10 41 views
3

這是我自己編寫的代碼,並試圖讓輸出EX = {「AADSTS70002:請求體中必須包含下列參數:‘client_secret或client_assertion’

請求體必須包含以下。參數:client_secretclient_assertion

static async Task<AuthenticationResult> getAccessToken() 
{ 
    string hardcodedUsername = ""; 
    string hardcodedPassword = ""; 
    string tenantName = "projectwidgets.com"; 
    string authString = "https://login.microsoftonline.com/" + tenantName; 
    AuthenticationContext authenticationContext = new AuthenticationContext(authString, false); 
    //Config for OAuth client credentials 
    string clientId = "as"; 
    string key = "kk"; 
    string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenantName); 
    var authContext = new AuthenticationContext(authority); 
    AuthenticationResult result = null; 
    try 
    { 
     result = await authContext.AcquireTokenAsync("https://pwsnapitazure.azurewebsites.net", clientId, new UserPasswordCredential(hardcodedUsername, hardcodedPassword)); 
    } 
    catch (Exception ex) 
    { 
      Console.WriteLine(ex.StackTrace); 
      System.Diagnostics.Debug.WriteLine(ex.Message); 
    }       
    return result; 
} 

回答

1

根據你的代碼,似乎你正在使用一個Web應用程序/ API使用的用戶名和密碼來驗證

我們只能使用本地客戶端的資源所有者流。機密客戶端(例如網站)不能使用直接用戶憑證。

您需要將其作爲公共客戶端(本機客戶端應用程序)調用,而不是作爲機密客戶端(Web應用程序/ API)調用。有關如何使用ADAL .NET通過用戶名/密碼驗證用戶的更多信息,請參閱this document。特別是Constraints & Limitations部分。

在守護程序或服務器應用程序,你可以考慮使用client credential flow,但該流程中,應用程序將顯示它的客戶端憑據的OAuth2令牌發行端點,作爲回報,獲取表示應用程序本身沒有任何用戶信息的訪問令牌。請點擊here瞭解更多關於客戶端憑證流程的細節,here是代碼示例。

相關問題