問題の説明
OSS APIまたはSDKを使用すると、「SignatureDoesNotMatch」署名関連のエラーが表示されます。
SignatureDoesNotMatch: 計算したリクエスト署名は、指定した署名と一致しません。 キーと署名方法を確認する原因
OSS APIまたはSDKを使用する場合、クライアントは検証のためにOSSサーバーに署名情報を伝達する必要があります。 クライアントによって計算された署名がOSSサーバーによって計算された署名と一致しない場合、リクエストは検証に合格しません。
解決策
チェックAKとSKの精度
ossbrowserツールを使用して、AKとSKが正しいかどうかを確認できます。 ossbrowserツールの使用方法の詳細については、「ossbrowserの迅速な使用」をご参照ください。
ossbrowserが使用されている場合、AccessKeyペアとSKは正しくありません。 詳細については、「AccessKeyペアの作成」をご参照ください。新しいAccessKeyペアとSKを作成します。
エンドポイント情報の精度の確認
エンドポイントが正しいかどうかを確認する必要があります。 異なるリージョンのバケットは、異なるエンドポイントに対応します。 詳細については、「ドメイン名とデータセンターへのアクセス」をご参照ください。 エンドポイント情報の形式は、endpoint = "http://oss-cn-beijing.aliyuncs.com" です。 OSSリソースの2つのリクエスト方法は次のとおりです。
URLの形式でOSSリソースをリクエストする場合、OSS URLの構成は次のとおりです。
[$スキーマ]://[$バケット].[$End point]/[$Object]説明注:
[$スキーマ]:HTTPまたはHTTPS。
[$Bucket]: OSSバケットの名前。
[$エンドポイント]: 各リージョンのエンドポイントの詳細については、「ドメイン名とデータセンターへのアクセス $End」をご参照ください。
[$Object] : OSSにアップロードされたオブジェクトのアクセスパス。
SDKの形式でOSSリソースをリクエストする場合、次のようになります。
文字列accessKeyId = "XXX"; 文字列accessKeySecret = "XXX"; String endpoint = "oss-cn-XXX.aliyuncs.com"; OSSClient client = new OSSClient (エンドポイント、accessKeyId、accessKeySecret);
SDKバージョンの確認
"SignatureDoesNotMatch" の問題は、いくつかの古いバージョンのSDKを使用するときに発生する可能性があります。 古いバージョンのSDKを使用している場合は、最新のSDKバージョンを使用してください。 公式Webサイトの対応するSDKリンクには、最新のバージョン情報があります。 アドレスの取得の詳細については、「Object Storage Service (OSS) が提供する主流言語SDK」をご参照ください。
構築したAPIの確認
署名が独自のAPIである場合は、OSSが提供するSDKを使用することを推奨します。 詳細については、「アクセス許可」をご参照ください。 または、署名の計算に使用されるアルゴリズムロジックを確認できます。 署名アルゴリズムの作成方法の詳細については、「ヘッダーに署名を含める」をご参照ください。
適用範囲
OSS