首页 > 解决方案 > ADAL 中的 IPlatformParameters

问题描述

我绝对是 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)

标签: vb.netadal

解决方案


做这个:

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

这是 ADAL .NET wiki 的链接,其中详细说明了如何使用 PlatformParameters。“PlatformParameters”类型的“参数”是 ADAL.NET 表达需要与用户进行何种交互的方式。

Auto仅在需要时提示用户输入凭据。

  • 如果缓存中已经存在令牌,则根本不会显示任何对话框。
  • 如果缓存中不存在令牌,但用户是已知的,或者会话 cookie 在用于交互的 Web 浏览器控件中可用,则对话框会闪烁但立即消失。
  • 如果缓存中不存在令牌且用户未知,则会显示对话框供用户登录

Always即使缓存中存在令牌并且用户有会话,也会始终提示用户输入凭据。当应用程序想要让用户有机会使用不同的身份登录而不给出任何先前身份的提示时,这很有用。

RefreshSession将显示 Web 浏览器,并且令牌获得更新的声明。如果登录 cookie 可用(在嵌入的 Web 视图中),则不会提示用户输入凭据,并且对话框将很快消失(会有闪烁)。

SelectAccount这将显示一个对话框,其中包含用户当前会话所在的身份。用户可以添加其他帐户。

Never[Android 和 iOS 除外]:不提示用户输入凭据。

CallerActivity[Android] 或OwnerWindows[.NET 4.5] 使应用程序开发人员能够控制哪个窗口/活动将成为身份验证对话框的父级。开发人员可能出于 UX 原因想要提供此父信息:以确保对话框显示在父窗口的中心和上方。


推荐阅读