Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net TokenCredential与AzureServiceTokenProvider的集成_.net_Azure - Fatal编程技术网

.net TokenCredential与AzureServiceTokenProvider的集成

.net TokenCredential与AzureServiceTokenProvider的集成,.net,azure,.net,Azure,此问题适用于Azure.Core1.1.0.0及更新版本 从这个版本开始,TokenCredential是一个抽象类,因此不能再使用旧的构造函数。我想使用AzureServiceTokenProvider(内部调用az cli)的结果来获取用于其他Azure服务的访问令牌(在我的例子中是下载blob)。我已经编写了一个从TokenCredential派生的简单类,它接受生成的令牌并返回一个AccessToken实例,但我不相信SDK中会缺少这个实例,尽管我找不到它 我已经查看了文档中的所有派生类

此问题适用于Azure.Core1.1.0.0及更新版本

从这个版本开始,
TokenCredential
是一个抽象类,因此不能再使用旧的构造函数。我想使用
AzureServiceTokenProvider
(内部调用az cli)的结果来获取用于其他Azure服务的访问令牌(在我的例子中是下载blob)。我已经编写了一个从TokenCredential派生的简单类,它接受生成的令牌并返回一个
AccessToken
实例,但我不相信SDK中会缺少这个实例,尽管我找不到它

我已经查看了文档中的所有派生类,但没有一个提供我想要的,即完全自动获取令牌(假设用户已经登录到az cli或满足某些其他先决条件)

这是我写的课。有没有类似的方法可以实现这一点

    public class AzureServiceTokenCredentials : TokenCredential
    {
        private readonly AccessToken _token;

        public AzureServiceTokenCredentials(AppAuthenticationResult result)
        {
            _token = new AccessToken(result.AccessToken, result.ExpiresOn);
        }

        public override AccessToken GetToken(TokenRequestContext requestContext, CancellationToken cancellationToken) => _token;

        public override ValueTask<AccessToken> GetTokenAsync(TokenRequestContext requestContext, CancellationToken cancellationToken) =>
            new ValueTask<AccessToken>(Task.FromResult(_token));
    }
公共类AzureServiceTokenCredentials:TokenCredential { 私有只读访问令牌_令牌; public AzureServiceTokenCredentials(AppAuthenticationResult) { _令牌=新的AccessToken(result.AccessToken,result.ExpiresOn); } public override AccessToken GetToken(TokenRequestContext requestContext,CancellationToken CancellationToken)=>\u token; public override ValueTask GetTokenAsync(TokenRequestContext requestContext,CancellationToken CancellationToken)=> 新的ValueTask(Task.FromResult(_标记)); }
DefaultAzureCredential做你想做的事。@juunas不适合我。EnvironmentCredential-与之不同的是,ManagedEntityCredential-是针对云中虚拟机的MSI,而不是用户,SharedTokenCacheChendential-我对此没有太多发现,但它没有使用az cli中的令牌,或者它不存在,也没有获得新的令牌InteractiveBrowserCredential-interactive,不是我想要的DefaultAzureCredential做你想做的事@juunas不适合我。EnvironmentCredential——与之不同的是ManagedEntityCredential——是针对云上虚拟机的MSI,而不是用户,SharedTokenCacheCredential——我对此并没有太多发现,但它没有使用az cli中的令牌,或者它不存在,也没有获得新的令牌InteractiveBrowserCredential——interactive,这不是我想要的