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

如何通过带参认证方法获取Token并应用到无账号密码的其他API请求头

解决思路

首先修正现有代码的隐藏错误:请求头中Bearer和Token之间缺少空格,会直接导致服务端识别认证信息失败,正确格式应为Bearer {token}。

针对调用其他API时无法获取login、pwd参数的问题,可采用以下几种方案:

  • 方案一:Token缓存机制(最常用)
    在TokenClass中新增静态字段缓存已获取的有效Token和过期时间,仅在首次登录或Token过期时需要传入账号密码,后续所有API请求直接读取缓存的Token即可。
    改造后的TokenClass示例代码如下:
public static class TokenClass
{
    // 缓存有效Access Token
    private static string _cachedAccessToken;
    // Token过期时间,默认提前1分钟过期,避免使用临界过期的Token
    private static DateTime _tokenExpireTime = DateTime.MinValue;
    private const string LoginUrl = "你的登录接口地址";
    private static readonly RestClient _client = new RestClient();

    // 仅首次登录时调用,传入账号密码获取Token并缓存
    public static void Login(string login, string pwd)
    {
        var restRequest = new RestRequest(LoginUrl, Method.GET);
        restRequest.AddHeader("X-Requested-With", "XMLHttpRequest");
        restRequest.AddHeader("Authorization", "Basic ZRZEFSFCSDFSFSDFSDS");
        restRequest.AddParameter("username", login);
        restRequest.AddParameter("password", pwd);
        IRestResponse response = _client.Execute(restRequest);
        var jObject = JObject.Parse(response.Content);
        _cachedAccessToken = jObject.GetValue("access_token").ToString();
        // 从登录返回结果取有效期,若接口未返回可按服务端规则手动设置,比如默认2小时
        int expireSeconds = jObject.GetValue("expires_in").ToObject<int>();
        _tokenExpireTime = DateTime.Now.AddSeconds(expireSeconds).AddMinutes(-1);
    }

    // 其他API请求调用该方法获取有效Token,无需传账号密码
    public static string GetValidToken()
    {
        if (string.IsNullOrEmpty(_cachedAccessToken) || DateTime.Now >= _tokenExpireTime)
        {
            // 存在RefreshToken机制可在此处调用刷新接口,无则抛出异常提示需要重新登录
            throw new InvalidOperationException("凭证已过期,请重新登录");
        }
        return _cachedAccessToken;
    }
}

后续API请求添加认证头的代码修改为:

restRequest.AddParameter("Authorization", $"Bearer {TokenClass.GetValidToken()}", ParameterType.HttpHeader);
  • 方案二:RefreshToken自动续期(安全性最高)
    若服务端支持OAuth2等标准认证体系,登录接口会同时返回access_token和refresh_token,将两个值都缓存下来,当access_token过期时,直接用refresh_token调用刷新接口获取新的有效access_token,全程不需要重新传入账号密码,安全性远高于缓存账号密码的方案。

  • 方案三:加密存储账号密码(兜底方案,不推荐)
    若服务端没有RefreshToken机制且需要长期自动续期,可以将账号密码对称加密后存储在本地安全区域(比如加密配置文件、系统用户私有目录),Token过期时读取加密信息解密后重新调用登录接口获取新Token,该方案存在账号密码泄露风险,仅适合内部非敏感工具类项目使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:15:00