访问令牌(Access Token)主要用于身份验证和授权,在调用阿里云智能语音交互API时,客户端应用或服务器端程序需要先获取一个有效的Token作为凭证,以此来证明请求的合法性,并获得对智能语音服务的访问权限。本文介绍Token的获取方式和常见问题。
场景概述
获取Token方式 | 建议使用场景 |
仅供测试使用,在控制台获取Token。 | |
正式环境使用,通过传入AccessKey ID和AccessKey Secret,在SDK通过代码定期自动获取Token。 | |
若对应的编程语言缺少SDK,或者需要控制依赖组件,可以通过OpenAPI获取Token。 |
常见问题
获取Token后调用服务报错” 'status': 40020105, 'message': 'Meta:APPKEY_NOT_EXIST:Appkey not exist ?“如何解决?
SDK如何通过代码获取Token的失效时间?接收到的返回值是1657132052,转成时间是1970-01-20 12:18:52的原因是什么?
获取Token异常,提示”Server unreachable: java.net.ConnectException: Connection refused?“如何解决?
通过OpenAPI获取Token报错“Specified signature is not matched with our calculation”如何解决?
通过SDK获取Token,当系统的时间不是标准时间时会获取失败,在SDK中是否可以自己设置timestamp,而不是获取系统的时间?
获取Token后调用服务报错” 'status': 40020105, 'message': 'Meta:APPKEY_NOT_EXIST:Appkey not exist ?“如何解决?
该报错是指AppKey不存在。
请您检查AppKey是否存在,若使用子账号,需要确认子账号是否被授权,然后确认AppKey、AccessKey和Token是否归属同一个账号。
如果是主账号,有明显标识主账号,请核对AppKey、AccessKey以及生成的Token信息是否归属同一账号。
如果是RAM子账号,有明显标识RAM用户,需要确认是否为RAM子账号增加NLS相关权限,然后核对AppKey、AccessKey以及生成的Token信息是否归属同一账号。
获取token的时候报错ErrCode 40020503 如何解决?
40020503错误指RAM子账号没有语音接口的权限,请前往访问控制台为RAM用户授予AliyunNLSFullAccess权限。具体操作,请参见为RAM用户授权。
调用语音API时,返回403 Forbidden错误如何解决?
403是指Token过期或无效。
请完成以下操作:
检查使用的Token是否填写正确。
检查使用的Token是否过期,如果过期需要获取新的Token。
获取Token返回为空或“null”如何解决?
进入AccessKey管理页面,检查AccessKey ID和AccessKey Secret是否正确。
检查是否已开通智能语音交互服务,如未开通请前往控制台开通服务。
如果使用RAM子账号,请检查是否对该RAM子账号赋予AliyunNLSFullAccess权限。
检查是否修改了当前系统时间,导致系统时间和实际时间不一致。
获取时Token报错”ErrMsg: 'No permission!'“如何解决?
该报错是指没有权限。
如果使用RAM子账号,请检查是否对该RAM子账号赋予AliyunNLSFullAccess权限。具体操作,请参见准备账号。
是否可以获取长期有效的Token?
出于安全考虑,智能语音交互服务不提供长期有效的Token。
SDK如何通过代码获取Token的失效时间?接收到的返回值是1657132052,转成时间是1970-01-20 12:18:52的原因是什么?
Token的有效期通过服务端响应消息的ExpireTime参数获取,为秒级时间戳。
获取Token失败,显示网络不可达”connect failed“如何解决?
检查AppKey、Token以及URL是否无误。
检查网络是否连通。连接错误一般是网络问题,建议您Ping域名或者使用telnet命令判断网络是否通畅。
获取Token异常,提示”Server unreachable: java.net.ConnectException: Connection refused?“如何解决?
显示被网络拒绝,建议您Ping域名或者使用telnet命令判断网络是否通畅,如果不通请检查网络。
postman测试时区不合适导致Token获取失败如何解决?
请您将时间改为北京时区,即东八区时间。
重新获取Token是否会导致已获取的Token失效?
不会。重新获取Token不会影响已获取Token的有效性,有效性只与时间有关。Token的有效期通过服务端响应消息的ExpireTime参数获取。
多个设备如何共用一个有效期内的Token?
同一个Token只要在有效期内可以被重复使用。
如何通过HTTP接口获取Token,不用SDK方式用网址直接获取,自己组织参数、签名该如何进行请求 ?
具体操作,请参见通过OpenAPI获取Token。
通过OpenAPI获取Token时,参数SignatureNonce不变,不能使用重复的UUID吗?
具体操作,请参见通过OpenAPI获取Token。
通过OpenAPI获取Token报错“Specified signature is not matched with our calculation”如何解决?
具体操作,请参见通过OpenAPI获取Token。
通过SDK获取Token,当系统的时间不是标准时间时会获取失败,在SDK中是否可以自己设置timestamp,而不是获取系统的时间?
不可以。Token需要根据系统时间来生成。