You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用SAS对Azure ArmClient进行身份验证?

用SAS令牌对ArmClient进行身份验证

由于Azure SDK没有直接提供将SAS令牌转换为TokenCredential的内置实现,你需要自定义一个TokenCredential子类来包装SAS令牌,以此满足ArmClient的参数要求。

步骤1:自定义SAS令牌凭证类

实现TokenCredential的两个核心方法,解析SAS令牌中的过期时间并返回包含令牌内容的AccessToken:

using Azure.Core;
using System;
using System.Threading;
using System.Threading.Tasks;

public class SasTokenCredential : TokenCredential
{
    private readonly string _sasToken;
    private readonly DateTimeOffset _expiresOn;

    public SasTokenCredential(string sasToken)
    {
        _sasToken = sasToken ?? throw new ArgumentNullException(nameof(sasToken));
        
        // 解析SAS令牌中的过期时间(se参数)
        var tokenSegments = sasToken.Split('&');
        foreach (var segment in tokenSegments)
        {
            if (segment.StartsWith("se=", StringComparison.OrdinalIgnoreCase))
            {
                if (long.TryParse(segment.Substring(3), out var epochSeconds))
                {
                    _expiresOn = DateTimeOffset.FromUnixTimeSeconds(epochSeconds);
                    break;
                }
            }
        }
        
        // 如果未解析到过期时间,设置默认有效期(当前时间+1小时)
        if (_expiresOn == default)
        {
            _expiresOn = DateTimeOffset.UtcNow.AddHours(1);
        }
    }

    public override AccessToken GetToken(TokenRequestContext requestContext, CancellationToken cancellationToken)
    {
        return new AccessToken(_sasToken, _expiresOn);
    }

    public override ValueTask<AccessToken> GetTokenAsync(TokenRequestContext requestContext, CancellationToken cancellationToken)
    {
        return new ValueTask<AccessToken>(GetToken(requestContext, cancellationToken));
    }
}

步骤2:使用自定义凭证初始化ArmClient

用你的SAS令牌实例化自定义凭证,再传入ArmClient的构造函数:

// 你的SAS令牌
string sasToken = $"SharedAccessSignature sr={url}&sig={sig}&se={exp}&skn={sharedAccessKeyName}";

// 创建SAS凭证实例
var sasCredential = new SasTokenCredential(sasToken);

// 初始化ArmClient(替换为实际租户ID)
var armClient = new ArmClient(sasCredential, "your-tenant-id");

注意事项

  • 确保SAS令牌的权限范围(sr参数指定的资源)和签名(sig)足够覆盖你要通过ArmClient执行的操作,否则会返回权限不足的错误。
  • 若SAS令牌中没有se参数,可根据业务场景调整过期时间的默认逻辑,比如设置更短的有效期避免令牌长期无效。

内容的提问来源于stack exchange,提问作者ed22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 02:44:59