Моя проблема: когда я использую проект Microsoft, строка кода, упомянутая в заголовке, выполняется и проходит проверку подлинности правильно, и я могу выполнять операции над пользователями, как показано в примере проекта "B2CGraphClient". Однако когда я копирую и вставляю B2CGraphClient.cs
в свое веб-приложение, эта строка кода зависает навсегда. Как это может быть?
Висящая строка - #184 в B2CGraphClient.cs
.
Подробности: я использую пример проекта с именем «B2CGraphClient», упомянутый в этом статья, zip-файл которой находится здесь. Файлы требуют установки переменных clientId
, clientSecret
и tenant
, которые мне удалось установить правильно, чтобы они соответствовали моему экземпляру AAD B2C. Значения этих переменных также были правильно установлены, когда я скопировал код B2CGraphClient.cs
в свой проект веб-приложения, поэтому я не думаю, что это проблема.
Подсказки: эти наблюдения потенциально могут быть проблемами:
- При запуске примера кода Microsoft «B2CGraphClient» не требуется, чтобы пользователь проходил аутентификацию в веб-приложении; однако мое веб-приложение требует, чтобы пользователь вводил свое имя пользователя/пароль перед использованием клиента Graph.
- Когда строка кода в заголовке запускается в моем веб-приложении, следующий URL-адрес в браузере:
https://login.microsoftonline.com/<my_domain>.onmicrosoft.com/B2C_1_SiUpIn/......
Я знаю, что имя политикиB2C_1_SiUpIn
не должно быть в этом URL-адресе. Но как мне это исправить?
Благодарю вас!
ОБНОВЛЕНИЕ
Я публикую код, который инициализирует B2CGraphClient, который показывает, что (по крайней мере, мне так кажется) единственными фрагментами информации, которые передаются клиенту для создания его учетных данных, являются имена clientId
, clientSecret
и tenant
.
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);