当前位置:   article > 正文

阿里云验证码功能对接,使用临时凭证时遇到的坑,报错code: 400, Specified header x-acs-security-token is mandatory for this acti_com.aliyun.tea.teaexception: code: 400, accesskeyi

com.aliyun.tea.teaexception: code: 400, accesskeyid is mandatory for this ac

最近因为项目需要,使用了阿里云的验证码产品:https://help.aliyun.com/zh/captcha/

对服务端来说其实是很简单的一个接口,官方也提供了示例:

// This file is auto-generated, don't edit it. Thanks.

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

using Tea;
using Tea.Utils;


namespace AlibabaCloud.SDK.Sample
{
    public class Sample 
    {

        public static string GetEnvProperty(string propertyName)
        {
            // TODO 请实现非明文硬编码方式获取您的AccessKey ID 和 AccessKey Secret,比如阿里云Credentials工具(参见https://help.aliyun.com/document_detail/378659.html),或其他您的系统中安全的获取方式。
            return "null";
        }

        public static async Task<string> GetEnvPropertyAsync(string propertyName)
        {
            // TODO 请实现非明文硬编码方式获取您的AccessKey ID 和 AccessKey Secret,比如阿里云Credentials工具(参见https://help.aliyun.com/document_detail/378659.html),或其他您的系统中安全的获取方式。
            return "null";
        }

        public static void Main(string[] args)
        {
            // ====================== 1. 初始化配置 ====================== 
            AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config();
            // 设置您的AccessKey ID 和 AccessKey Secret。
            // getEnvProperty只是个示例方法,需要您自己实现AccessKey ID 和 AccessKey Secret安全的获取方式。
            config.AccessKeyId = GetEnvProperty("ACCESS_KEY_ID");
            config.AccessKeySecret = GetEnvProperty("ACCESS_KEY_SECRET");
            //设置请求地址
            config.Endpoint = "captcha.cn-shanghai.aliyuncs.com";
            // 设置连接超时为5000毫秒
            config.ConnectTimeout = 5000;
            // 设置读超时为5000毫秒
            config.ReadTimeout = 5000;
            // ====================== 2. 初始化客户端(实际生产代码中建议复用client) ====================== 
            AlibabaCloud.SDK.Captcha20230305.Client client = new AlibabaCloud.SDK.Captcha20230305.Client(config);
            // 创建APi请求
            AlibabaCloud.SDK.Captcha20230305.Models.VerifyIntelligentCaptchaRequest request = new AlibabaCloud.SDK.Captcha20230305.Models.VerifyIntelligentCaptchaRequest();
            // 本次验证的场景ID,建议传入,防止前端被篡改场景
            request.SceneId = "本次验证的场景ID";
            // 前端传来的验证参数 CaptchaVerifyParam
            request.CaptchaVerifyParam = "前端传来的验证参数 CaptchaVerifyParam";
            // ====================== 3. 发起请求) ====================== 
            try
            {
                AlibabaCloud.SDK.Captcha20230305.Models.VerifyIntelligentCaptchaResponse resp = client.VerifyIntelligentCaptcha(request);
                // 建议使用您系统中的日志组件,打印返回
                // 获取验证码验证结果(请注意判空),将结果返回给前端。出现异常建议认为验证通过,优先保证业务可用,然后尽快排查异常原因。
                bool? captchaVerifyResult = resp.Body.Result.VerifyResult;
                // 原因code
                string captchaVerifyCode = resp.Body.Result.VerifyCode;
            }
            catch (TeaException error)
            {
                // 建议使用您系统中的日志组件,打印异常
                // 出现异常建议认为验证通过,优先保证业务可用,然后尽快排查异常原因。
                bool? captchaVerifyResult = true;
            }
            catch (Exception _error)
            {
                TeaException error = new TeaException(new Dictionary<string, object>
                {
                    { "message", _error.Message }
                });
                // 建议使用您系统中的日志组件,打印异常
                // 出现异常建议认为验证通过,优先保证业务可用,然后尽快排查异常原因。
                bool? captchaVerifyResult = true;
            }
        }


    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83

上面的示例,使用子账号,添加了对应的权限,其实是没问题的,但是使用阿里云Credentials工具,用临时凭证的话,就会出问题,我遇到的报错是:

code: 400, Specified header x-acs-security-token is mandatory for this action. request id: 487F69EC-20A5-5566-A753-A45F921B5994
  • 1

我是创建了一个角色,添加了对应的权限后,调用STS服务的AssumeRole接口获取的临时凭证,需要在官方示例中添加一行代码即可:

//临时凭证需要token  官方示例没有给出  临时凭证的token
config.SecurityToken = token;
  • 1
  • 2

之前研究了半天, 一直以为是request请求里面添加,没想到是生成client的时候就要。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/838033
推荐阅读
相关标签
  

闽ICP备14008679号