云服务器内容精选
-
Token的权限范围问题 在使用Token认证时,需要先申请Token,申请Token时需要填写Token是全局级别的还是项目级别的,如下申请Token接口的请求Body体中scope所示。 { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": "username", "password": "********", "domain": { "name": "domainname" } } } }, "scope": { "project": { "name": "xxxxxxxx" } } }} 区域级服务需要获取项目级别的Token(区域默认对应一个项目,这个项目由系统预置),此时请求body中auth.scope的取值为project。 全局级服务需要获取全局级别的Token,此时请求body中auth.scope的取值为domain。 对于区域级服务,如果获取全局级别的Token,虽能使用该Token通过认证,但无法在后端通过鉴权,会导致请求失败。 例如获取一个全局Token,如下所示。 { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "domain": { "name": "domainname" }, "name": "username", "password": "********" } } }, "scope": { "domain": { "id": "0503dda878000fed0f75c0096d70a960" } } }} 然后调用E CS 服务的查询ECS服务器列表的API,则会得到如下响应。表示Token与URL中项目不匹配,返回错误。 { "error": { "message": "tenantId in token is not the same with in URL.", "code": "Common.0018" }} 此种情况下,如果调用全局级服务的API,如TMS的API,则会正确调用。
-
Token与project不匹配 在使用Token认证时,经常会出现申请了Token,但是申请Token时的权限范围是区域A,但是请求时却请求调用区域B的资源,这是往往会得到类似如下的返回。表示Token与请求不匹配。 { "error": { "message": "tenantId in token is not the same with in URL.", "code": "Common.0018" }} 解决该问题的方法通常有两种: 使用正确权限范围的Token做请求认证,例如要请求区域B的资源,申请Token时填写 使用AK/SK认证鉴权。
-
认证不通过 认证不通过的请求会被API网关拒绝,得到类似如下的返回,返回以APIGW开头的错误码。 比如使用Token认证请求没有带Token,返回如下。 { "error_msg": "Incorrect IAM authentication information: x-auth-token not found", "error_code": "APIGW.0301", "request_id": "7775eaa6b4bbe5934e565349bd27c298"} 使用了错误的Token,返回如下。 { "error_msg": "Incorrect IAM authentication information: decrypt token fail", "error_code": "APIGW.0301", "request_id": "0e812a89eee650de8e1f55cdae28b2c9"} 使用了错误的AK,会返回如下错误。 Traceback (most recent call last): File "/home/user/.local/lib/python3.7/site-packages/huaweicloudsdkcore/http/http_client.py", line 119, in response_hook resp.raise_for_status() File "/home/user/.local/lib/python3.7/site-packages/requests/models.py", line 953, in raise_for_status raise HTTPError(http_error_msg, response=self)requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://iam.myhuaweicloud.com/v3/projects?name=cn-north-4During handling of the above exception, another exception occurred:Traceback (most recent call last): File "/home/user/.local/lib/python3.7/site-packages/huaweicloudsdkcore/auth/credentials.py", line 93, in process_auth_params self.project_id = keystone_list_projects(http_client, request) File "/home/user/.local/lib/python3.7/site-packages/huaweicloudsdkcore/auth/iam_service.py", line 49, in keystone_list_projects raise e File "/home/user/.local/lib/python3.7/site-packages/huaweicloudsdkcore/auth/iam_service.py", line 47, in keystone_list_projects http_response = http_client.do_request_sync(request) File "/home/user/.local/lib/python3.7/site-packages/huaweicloudsdkcore/http/http_client.py", line 93, in do_request_sync self.response_error_hook_factory()(response) File "/home/user/.local/lib/python3.7/site-packages/huaweicloudsdkcore/http/http_client.py", line 130, in response_hook raise exceptions.ClientRequestException(response_status_code, sdk_error)huaweicloudsdkcore.exceptions.exceptions.ClientRequestException: ClientRequestException - {status_code:401,request_id:3f979354fbec41b3cc0bd28ce7865e20,error_code:APIGW.0301,error_msg:Incorrect IAM authentication information: ak xxxxxx not exist } 使用了错误的SK,返回如下。 huaweicloudsdkcore.exceptions.exceptions.ApiValueError: Failed to get project id, Incorrect IAM authentication information: verify aksk signature fail, canonicalRequest:GET|/v3/projects/|name=cn-north-4|host:iam.myhuaweicloud.com|x-sdk-date:20210902T011700Z||host;x-sdk-date|e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
-
认证、鉴权和授权 认证:由APIG来做(通过Token或AK/SK),判断调用者的身份,是否是合法用户,是否能否访问华为云。 鉴权:由云服务实现,判断调用者是否具有操作某项资源的权限。 授权:在IAM中操作,对某个用户/角色授权,让这个角色具有某种权限。 华为云支持Token和AK/SK两种认证方式。 Token的有效期为24小时,需要使用一个Token鉴权时,可以先缓存起来,避免频繁调用。 AK/SK长期有效。AK/SK加密调用请求。 推荐使用AK/SK认证,其安全性比Token认证要高。且华为云SDK默认使用AK/SK,优先推荐使用SDK调用API,相对REST API,SDK使用更为便利。
-
终端节点Endpoint 在调用API时,需要通过Endpoint确定访问哪个服务,如下图所示。 对于全局级服务,只有一个Endpoint,例如TMS的Endpoint为tms.myhuaweicloud.com 对于区域级服务,每个region的Endpoint都不同,例如ECS在北京四的Endpoint为ecs.cn-north-4.myhuaweicloud.com。 所有服务的Endpoint详细信息都可以在https://developer.huaweicloud.com/endpoint查询。
-
认证鉴权示例 下面通过举例为您介绍调用API的认证鉴权的关系。 调用API需要认证,如果没有认证,调用会遭到API网关的拒绝。会得到如下回显。 { "error_msg": "Incorrect IAM authentication information: x-auth-token not found", "error_code": "APIGW.0301", "request_id": "7775eaa6b4bbe5934e565349bd27c298"} 此处会返回APIGW.0301的错误码,错误信息意思是缺少x-auth-token,这是API网关返回的内容,表示认证不通过,不能访问。 假设新创建一个IAM用户,未加入任何用户组,这时这个IAM用户没有任何创建华为云资源的权限,如果此时先获取token,然后调用API,可以通过API网关的认证,但是后端云服务会鉴权说没有权限。 例如调用ECS服务的查询ECS服务器列表的API。 GET https://ecs.cn-north-4.myhuaweicloud.com/v1/05041fffa40025702f6dc009cc6f8f33/cloudservers/detail 会得到如下响应,这次返回的不是APIGW的错误码,而是ECS的错误码,表示没有权限,禁止执行该操作。 { "error": { "message": "do not have the required roles, forbidden to perform this action.", "code": "Ecs.0110" }} 如果将上面的用户加入到一个用户组,并给这个用户组授予查询ECS服务器列表的权限。重新 获取Token (注意这里需要重新获取Token,否则Token还是上一次的授权权限),然后调用ECS服务的查询ECS服务器列表的API,则会得到如下响应。 这是正确 { "count": 8, "servers": [ { "fault": null, "id": "78ccc986-016f-4405-94f9-c4d58421eca7", "name": "cce-612884-06913", "addresses": { "377a7782-72e4-4db2-96b7-841d5d6f18a8": [ {...
更多精彩内容
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格