【问题标题】:InteractiveBrowserCredential doesn't show popup window sometimesInteractiveBrowserCredential 有时不显示弹出窗口
【发布时间】:2021-06-03 15:21:20
【问题描述】:

我有一个 WPF 应用程序,它使用与 Azure 存储 blob 的连接。它适用于连接字符串,但我想通过 Active Directory(带有登录窗口)访问 blob。最好的解决方案似乎是使用 InteractiveBrowserCredential,但我这里有个问题 - 有时会显示弹出窗口并且我已通过身份验证并且可以成功获取 blob,但 有时浏览器弹出窗口不是显示并且应用程序挂起...没有抛出错误。

我正在像这样使用 InteractiveBrowserCredential:

var blobContainerClient = new BlobContainerClient(new Uri(...)), new InteractiveBrowserCredential());

然后通过前缀获取 blob:

 var blobs = blobContainerClient.GetBlobs(prefix: prefix);
 var files = blobs.Select(b => ...);
 IEnumerable<string> res = files.AsParallel().Select(b => ...).ToArray(); //program hangs here
 return res;

而且程序有时无法继续。

但如果我打电话,例如:

blobContainerClient.Exists()

程序总是挂起并且从不执​​行......(仍然有任何错误......)

我发现了一个报告的bughttps://github.com/Azure/azure-sdk-for-net/issues/10083,这里用这种方法描述死锁,因为有异步实现的同步版本:

public override AccessToken GetToken(TokenRequestContext requestContext, CancellationToken cancellationToken = default)
        {
            return GetTokenImplAsync(requestContext, cancellationToken).GetAwaiter().GetResult();
        }

GetTokenImplAsync(requestContext,cancellationToken) 返回 ValueTask 的地方,他们可能会在不完整的任务上调用 .GetAwaiter().GetResult() 。这可能是我遇到的问题吗?如果是,如何解决?

【问题讨论】:

    标签: .net wpf azure authentication azure-storage


    【解决方案1】:

    DisableAutomaticAuthentication=true,我认为它总是需要用户登录。

    Java SDK Doc:

    Try to use below code.

    var options = new InteractiveBrowserCredentialOptions()
    {
        DisableAutomaticAuthentication = true
    };
    InteractiveBrowserCredential credential = new InteractiveBrowserCredential(options);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      • 2020-03-16
      • 2022-12-14
      • 2014-09-02
      相关资源
      最近更新 更多