本文由簡體中文內容自動轉碼而成。阿里雲不保證此自動轉碼的準確性、完整性及時效性。本文内容請以簡體中文版本為準。

使用STS Token調用API

更新時間:2024-08-22 20:00

內容檢測API支援通過扮演RAM角色的臨時身份憑證(STS Token)的方式進行調用。使用STS Token調用內容檢測API之前,您需要先調用AssumeRole介面,擷取扮演RAM角色的STS Token。本文介紹如何擷取STS Token和如何通過Token調用Alibaba Content Security ServiceAPI

說明

STS Token方式調用可以保護帳號AccessKey資訊,相比AccessKey方式更具有隱私性。

使用限制

只支援使用RAM使用者(子帳號)或RAM角色調用,不支援使用阿里雲帳號(主帳號)調用。

前提條件

已為RAM使用者或RAM角色授予STS的系統管理權限(AliyunSTSAssumeRoleAccess)。具體操作,請參見為RAM使用者授權為RAM角色授權

步驟一:擷取STS Token

關於如何擷取STS Token,請參見AssumeRole - 擷取扮演角色的臨時身份憑證

擷取STS Token程式碼範例

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest


# 注意:此處執行個體化的client儘可能重複使用,提升檢測效能。避免重複建立串連。
# 常見擷取環境變數方式:
# 擷取RAM使用者AccessKey ID:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
# 擷取RAM使用者AccessKey Secret:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
client = AcsClient("建議從環境變數中擷取RAM使用者AccessKey ID", "建議從環境變數中擷取RAM使用者AccessKey Secret", "cn-shanghai")
request = CommonRequest()
request.set_accept_format('json')
request.set_domain('sts.aliyuncs.com')
request.set_method('POST')
request.set_protocol_type('https')  # https | http
request.set_version('2015-04-01')
request.set_action_name('AssumeRole')
request.add_query_param("RoleArn", "acs:ram::174*************:role/ali**")
request.add_query_param("RoleSessionName", "alink")
response = client.do_action_with_exception(request)
print(str(response, encoding='utf-8'))

正常返回樣本

{
    "RequestId": "1*******-1111-5548-1111-6011111111D0",
    "AssumedRoleUser":
    {
        "Arn": "acs:ram::17****************:role/alink/alink",
        "AssumedRoleId": "3***************3:alink"
    },
    "Credentials":
    {
        "SecurityToken": "CAIS6Q******************wFnzm6aq/om6e49",
        "AccessKeyId": "STS.NTu***************hh",
        "AccessKeySecret": "FNQXp********************KCaZmpnA8fuyL",
        "Expiration": "2022-12-13T04:43:09Z"
    }
}
說明

上面返回樣本中Credentials欄位包含了調用Alibaba Content Security ServiceAPI所需的參數,其中Expiration為Token到期失效時間(UTC時間),需要在有效期間內使用。

步驟二:通過STS Token調用Alibaba Content Security ServiceAPI

以下以文本審核1.0版、增強版為例,為您展示通過STS Token調用Alibaba Content Security ServiceAPI的程式碼範例。

文本審核1.0版介面樣本

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.profile import region_provider
from aliyunsdkcore.auth.credentials import StsTokenCredential// 該方法的入參為STS Token擷取的參數。
from aliyunsdkgreen.request.v20180509 import TextScanRequest
import uuid
import json


sts_token_credential = StsTokenCredential("Credentials_AccessKeyId", "Credentials_AccessKeySecret", "Credentials_SecurityToken")
acs_client = AcsClient(region_id='cn-shanghai', credential=sts_token_credential)

region_provider.modify_point('Green', 'cn-shanghai', 'green.cn-shanghai.aliyuncs.com')
# 每次請求時需要建立request,請勿複用request對象。
request = TextScanRequest.TextScanRequest()
request.set_accept_format('JSON')
task1 = {"dataId": str(uuid.uuid1()),
         "content": "textContentToBeModerated",
         }
# 文本反垃圾檢測情境的情境參數是antispam。
request.set_content(bytearray(json.dumps({"tasks": [task1], "scenes": ["antispam"]}), "utf-8"))
response = acs_client.do_action_with_exception(request)
print(response)
result = json.loads(response)
if 200 == result["code"]:
    taskResults = result["data"]
    for taskResult in taskResults:
        if (200 == taskResult["code"]):
            sceneResults = taskResult["results"]
            for sceneResult in sceneResults:
                scene = sceneResult["scene"]
                suggestion = sceneResult["suggestion"]
                # 根據scene和suggestion設定後續操作。

文本審核增強版介面樣本

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.auth.credentials import StsTokenCredential
from aliyunsdkcore.request import CommonRequest


sts_token_credential = StsTokenCredential("Credentials_AccessKeyId", "Credentials_AccessKeySecret", "Credentials_SecurityToken")
client = AcsClient(region_id='cn-shanghai', credential=sts_token_credential)

request = CommonRequest()
request.set_accept_format('json')
request.set_method('POST')
request.set_protocol_type('https')  # https | http
request.set_domain('green-cip.cn-shanghai.aliyuncs.com')
request.set_version('2022-03-02')
request.set_action_name('TextModeration')

# 審核服務類型,包括:
# nickname_detection:使用者暱稱
# chat_detection:聊天互動
# comment_detection:動態評論
request.add_query_param("Service", "nickname_detection")
request.add_query_param("ServiceParameters", {'content': '測試文本', 'accountId': "user123"})

response = client.do_action_with_exception(request)
print(str(response, encoding='utf-8'))

如何解決報錯:You are not authorized to do this action. You should be authorized by RAM?

未對RAM使用者或RAM角色授予STS的系統管理權限,會顯示該錯誤資訊。造成該問題的原因和解決方案如下:

  • 本頁導讀 (0, M)
  • 使用限制
  • 前提條件
  • 步驟一:擷取STS Token
  • 步驟二:通過STS Token調用Alibaba Content Security ServiceAPI
  • 文本審核1.0版介面樣本
  • 文本審核增強版介面樣本
  • 如何解決報錯:You are not authorized to do this action. You should be authorized by RAM?
文檔反饋
phone 聯絡我們

立即和Alibaba Cloud在線服務人員進行交談,獲取您想了解的產品信息以及最新折扣。

alicare alicarealicarealicare