这行永远挂起:authContext.AcquireTokenAsync(“https://graph.windows.net”,凭证);

时间:2018-03-16 06:17:26

标签: c# azure-ad-b2c azure-ad-graph-api azure-authentication

我的问题是:当我使用Microsoft的项目时,标题中提到的代码行运行并正确验证,我可以对用户执行操作,如“B2CGraphClient”示例项目中所示。 然而当我将B2CGraphClient.cs复制并粘贴到我的网络应用程序中时,这行代码将永远挂起。怎么会这样?

挂起的行是B2CGraphClient.cs中的#184。

详细说明: 我正在使用此article中提到的名为“B2CGraphClient”的示例项目,其zipfile位于here。这些文件需要设置变量clientIdclientSecrettenant,我能够正确设置这些变量以适合我的AAD B2C实例。当我将B2CGraphClient.cs代码复制到我的Web应用程序项目中时,这些变量的值也已正确设置,因此我认为这不是问题。

线索: 这些观察可能是问题所在:

  1. 运行Microsoft示例“B2CGraphClient”代码时,不要求用户对Web应用程序进行身份验证;但是,我的Web应用程序确实要求用户在使用Graph Client之前输入他/她的用户名/密码。
  2. 当我的Web应用程序中运行标题中的代码行时,以下是浏览器中的URL:https://login.microsoftonline.com/<my_domain>.onmicrosoft.com/B2C_1_SiUpIn/......我知道B2C_1_SiUpIn策略名称不应该在此URL。但是我该如何解决这个问题?
  3. 谢谢!

    更新

    我发布了初始化B2CGraphClient的代码,该代码显示(至少在我看来)传递到客户端以创建其凭据的唯一信息是clientIdclientSecrettenant名称。

        public B2CGraphClient(string clientId, string clientSecret, string tenant)
        {
            // The client_id, client_secret, and tenant are pulled in from the App.config file
            this.clientId = clientId;
            this.clientSecret = clientSecret;
            this.tenant = tenant;
    
            // The AuthenticationContext is ADAL's primary class, in which you indicate the direcotry to use.
            this.authContext = new AuthenticationContext("https://login.microsoftonline.com/" + tenant);
    
            // The ClientCredential is where you pass in your client_id and client_secret, which are 
            // provided to Azure AD in order to receive an access_token using the app's identity.
            this.credential = new ClientCredential(clientId, clientSecret);
        }
    

    credential稍后用于验证图形客户端:

            AuthenticationResult result = await authContext.AcquireTokenAsync(aadGraphResourceId, credential);
    

1 个答案:

答案 0 :(得分:2)

已经为控制台应用程序开发了

school/ students/ teachers/ library/ application/ system/ assets/ index.php .htaccess

要将B2CGraphClient集成到Web应用程序中,您应该将B2CGraphClient调用从同步方法更改为异步方法。

E.g。改变自:

AcquireToken

为:

AuthenticationResult authResult = authContext.AcquireToken("https://graph.windows.net", credential);