.net - InteractiveBrowserCredential 有时不显示弹出窗口
问题描述
我有一个 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()
程序总是挂起并且从不执行......(仍然有任何错误......)
我发现了一个报告的错误https://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, cancelToken) 返回 ValueTask 并且他们可能会在不完整的任务上调用 .GetAwaiter().GetResult() 。这可能是我遇到的问题吗?如果是这样,如何解决?
解决方案
DisableAutomaticAuthentication=true
,我认为它总是需要用户登录。
尝试使用下面的代码。
var options = new InteractiveBrowserCredentialOptions()
{
DisableAutomaticAuthentication = true
};
InteractiveBrowserCredential credential = new InteractiveBrowserCredential(options);
推荐阅读
- json - 在 ASP.NET CORE 表单中使用 AJAX 返回 JSON
- java - 二分查找只返回一条语句
- python - 如何填写数据框中的字段具有“1900-01-01”作为日期的特定日期?
- r - 使用存储在不同数据框中的值来改变数据框的列
- mongodb - Mongo:Upsert以原子方式将所有静态字段复制到新文档
- javascript - 撤销通知 API 的权限
- python-3.x - 将 Pandas groupby 与总列和总行一起使用
- java - 我应该如何使用 java servlet 保持我的 http 连接?
- maven - sp 的 Maven 众所周知的限定词代表什么?
- angular - 如何获取有关输入表单值 Angular 的旧数据