IPlatformParameters в ADAL - PullRequest
       7

IPlatformParameters в ADAL

0 голосов
/ 26 июня 2018

Я непременно новичок в VB.net. Я ищу твою помощь здесь.

Я пишу код для подключения к REST API. У меня трудности с передачей одного параметра в функцию. Вот мой код:

Dim AuthContext As New AuthenticationContext("https://login.microsoftonline.com/")
        Dim ClientId As String = "f8f710b23-d3ea-4dd3-8a0e-c5958a6bc16d"
        Dim RedirectUri As New Uri("ms-app://redirect/")
        Dim ResourceIDUri As String = "https://analysis.windows.net/powerbi/api"
        Dim AccessToken As String
        Dim AuthHeader As String
        Dim task1 As Task(Of AuthenticationResult) = AuthContext.AcquireTokenAsync(ResourceIDUri, ClientId, RedirectUri, New IPlatformParameters(PromptBehavior.Auto), New UserIdentifier("user1", 2))

и моя проблема связана с параметром (New IPlatformParameters(PromptBehavior.Auto)), поскольку я получаю следующую ошибку:

'New' cannot be used on an interface

Вот документация для AccuireTokenSync

Может кто-нибудь подсказать мне исправить синтаксис передачи параметра IPlatformParameters(PromptBehavior.Auto)

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Мне пришлось переписать другой проект с использованием правильного пространства имен и правильной версии Microsoft.IdentityModel.Clients.ActiveDirectory.DLL, и я смог получить маркер доступа, используя этот фрагмент кода:

Dim AuthContext As AuthenticationContext
Dim ClientId As String
Dim RedirectUri As Uri
Dim TokenTask As Task(Of AuthenticationResult)
Dim AccessToken As String

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    AuthContext = New AuthenticationContext("https://login.microsoftonline.com/")
    ClientId = "<ClientID"
    RedirectUri = New Uri("<RedirectURI>")
    AccessToken = ""
    TokenTask = AuthContext.AcquireTokenAsync("<ResourceID>", ClientId, RedirectUri, New PlatformParameters(PromptBehavior.Auto), New UserIdentifier("user1", UserIdentifierType.RequiredDisplayableId))
    TokenTask.Wait(30000)
    AccessToken = TokenTask.Result.AccessToken
    TextBox1.Text = AccessToken
End Sub
0 голосов
/ 27 июня 2018

Сделайте это:

result = await ac.AcquireTokenAsync("<clientId>", "https://resourceUrl", new Uri("https://ClientReplyUrl"), new PlatformParameters(PromptBehavior.Auto));

Вот ссылка на вики ADAL .NET, в которой подробно описано, как использовать PlatformParameters. «параметры» типа «PlatformParameters» - это способ ADAL.NET выразить, какого рода взаимодействие должно происходить с пользователем.

Auto пользователь запрашивает учетные данные только при необходимости.

  • Если токен уже существует в кэше, диалоговое окно вообще не отображается.
  • Если токен не существует в кэше, но пользователь известен, или файл cookie сеанса доступен в элементе управления веб-браузера, используемом для взаимодействия, диалоговое окно мигает, но сразу исчезает.
  • Если токен не существует в кеше, а пользователь неизвестен, то для пользователя отображается диалоговое окно для входа

Always пользователю всегда предлагается ввести учетные данные, даже если токен существует в кэше и если у пользователя есть сеанс. Это полезно, когда приложение хочет дать пользователю возможность войти в систему с другим идентификатором, не давая никаких намеков на предыдущие идентификаторы.

RefreshSession отображается веб-браузер, и токен получает обновленные заявки. Если файлы cookie для входа доступны (во встроенном веб-представлении), пользователю не будет предложено ввести учетные данные, и диалоговое окно быстро исчезнет (будет мигать).

SelectAccount это показывает диалоговое окно, содержащее идентификаторы, под которыми пользователь имеет сеансы в настоящее время. Пользователь может добавлять другие учетные записи.

Never [кроме Android и iOS]: не запрашивает у пользователя учетные данные.

CallerActivity [Android] или OwnerWindows [.NET 4.5] позволяют разработчикам приложений контролировать, какое окно / действие будет родительским для диалогового окна аутентификации. Разработчик может захотеть предоставить эту родительскую информацию по причинам UX: чтобы диалоговое окно отображалось по центру родительского окна и над ним.

...