使用者應用程式的身份驗證與存取控制 - Amazon WorkDocs

請注意:Amazon 不再提供新客戶註冊和帳戶升級 WorkDocs。在此處了解遷移步驟:如何從 Amazon 遷移資料 WorkDocs

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用者應用程式的身份驗證與存取控制

亞馬遜 WorkDocs 使用者層級應用程式是透過 Amazon 註冊並受管 WorkDocs 主控台。開發人員應註冊他們的應用程序My Applications亞馬遜上的頁面 WorkDocs 主控台將提供每個應用程式唯一的 ID。在註冊期間,開發人員應指定重新導向 URI,以讓他們接收存取字符以及應用程式範圍。

目前,應用程序只能訪問亞馬遜 WorkDocs 相同內的網站AWS他們註冊的帳戶。

授予撥打亞馬遜的許可 WorkDocs API

命令列介面使用者必須擁有 Amazon 的完整許可 WorkDocs 和AWS Directory Service。如果沒有權限,任何 API 調用都會返回UnauthorizedResourceAccessException訊息。以下政策允許完整許可。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "workdocs:*", "ds:*", "ec2:CreateVpc", "ec2:CreateSubnet", "ec2:CreateNetworkInterface", "ec2:CreateTags", "ec2:CreateSecurityGroup", "ec2:DescribeVpcs", "ec2:DescribeSubnets", "ec2:DescribeNetworkInterfaces", "ec2:DescribeAvailabilityZones", "ec2:AuthorizeSecurityGroupEgress", "ec2:AuthorizeSecurityGroupIngress", "ec2:DeleteSecurityGroup", "ec2:DeleteNetworkInterface", "ec2:RevokeSecurityGroupEgress", "ec2:RevokeSecurityGroupIngress" ], "Effect": "Allow", "Resource": "*" } ] }

如果您想要授予唯讀許可,請使用此政策。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "workdocs:Describe*", "ds:DescribeDirectories", "ec2:DescribeVpcs", "ec2:DescribeSubnets" ], "Effect": "Allow", "Resource": "*" } ] }

在政策中,第一個動作授予訪問所有亞馬遜 WorkDocs Describe操作。所以此DescribeDirectories 行動獲得有關您的信息AWS Directory Service目錄。Amazon EC2 操作啟用亞馬遜 WorkDocs 以取得您的 VPC 與子網路清單。

在 API 呼叫中使用資料夾 ID

每當 API 呼叫存取資料夾時,您都必須使用資料夾 ID,而不是資料夾名稱。例如,如果您通過client.get_folder(FolderId='MyDocs')時,API 呼叫會傳回UnauthorizedResourceAccessException消息和以下 404 消息。

client.get_folder(FolderId='MyDocs') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Users\user-name\AppData\Local\Programs\Python\Python36-32\lib\site-packages\botocore\client.py", line 253, in _api_call return self._make_api_call(operation_name, kwargs) File "C:\Users\user-name\AppData\Local\Programs\Python\Python36-32\lib\site-packages\botocore\client.py", line 557, in _make_api_call raise error_class(parsed_response, operation_name) botocore.errorfactory.UnauthorizedResourceAccessException: An error occurred (UnauthorizedResourceAccessException) when calling the GetFolder operation: Principal [arn:aws:iam::395162986870:user/Aman] is not allowed to execute [workdocs:GetFolder] on the resource.

為了避免這種情況,請在文件夾的 URL 中使用 ID。

site.workdocs/index.html#/folder/abc123def456ghi789jkl789mno4be7024df198736472dd50ca970eb22796082e3d489577.

傳遞該 ID 會傳回正確的結果。

client.get_folder(FolderId='abc123def456ghi789jkl789mno4be7024df198736472dd50ca970eb22796082e3d489577') {'ResponseMetadata': {'RequestId': 'f8341d4e-4047-11e7-9e70-afa8d465756c', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'f234564e-1234-56e7-89e7-a10fa45t789c', 'cache-control': 'private, no-cache, no-store, max-age=0', 'content-type': 'application/json', 'content-length': '733', 'date': 'Wed, 24 May 2017 06:12:30 GMT'}, 'RetryAttempts': 0}, 'Metadata': {'Id': 'abc123def456ghi789jkl789mno4be7024df198736472dd50ca970eb22796082e3d489577', 'Name': 'sentences', 'CreatorId': 'S-1-5-21-2125721135-1643952666-3011040551-2105&d-906724f1ce', 'ParentFolderId': '0a811a922403ae8e1d3c180f4975f38f94372c3d6a2656c50851c7fb76677363', 'CreatedTimestamp': datetime.datetime(2017, 5, 23, 12, 59, 13, 8000, tzinfo=tzlocal()), 'ModifiedTimestamp': datetime.datetime(2017, 5, 23, 13, 13, 9, 565000, tzinfo=tzlocal()), 'ResourceState': 'ACTIVE', 'Signature': 'b7f54963d60ae1d6b9ded476f5d20511'}}

建立應用程式

作為 Amazon WorkDocs 管理者,可以運用下列步驟來建立您的應用程式。

建立應用程式
  1. 開啟 Amazon WorkDocs 位於的主控台https://console.aws.amazon.com/zocalo/

  2. 選擇 My Applications (我的應用程式)Create an Application (建立應用程式)

  3. 輸入下列值:

    Application Name (應用程式名稱)

    應用程式名稱。

    電子郵件

    與應用程式建立關聯的電子郵件地址。

    Application Description (應用程式描述)

    應用程式的描述。

    Redirect URIs (重新導向 URI)

    您想要 Amazon 的位置 WorkDocs 以重新導向流量。

    Application Scopes (應用程式範圍)

    您希望您的應用程式擁有的讀取或寫入範圍。如需詳細資訊,請參閱 應用程式範圍

  4. 選擇 Create (建立)。

應用程式範圍

亞馬遜 WorkDocs 支援下列應用程式範圍:

  • 內容已閱讀 (workdocs.content.read) 可讓您的應用程式存取下列 Amazon WorkDocs 應用程式介面

    • Get* (取得)

    • Describe* (描述)

  • 內容寫入 (英文)workdocs.content.write) 可讓您的應用程式存取下列 Amazon WorkDocs 應用程式介面

    • 建立*

    • 更新*

    • 刪除*

    • Initiate* (啟動)

    • Abort* (中止)

    • Add* (新增)

    • Remove* (移除)

授權

應用程式註冊完成後,應用程式便可代表任何 Amazon 請求授權 WorkDocs 使用者。若要執行此操作,該應用程式應造訪 Amazon WorkDocs OAuth 端點,https://auth.amazonworkdocs.com/oauth,並提供下列查詢參數:

  • [必要]app_id當應用程式註冊後,即產生應用程式 ID。

  • [必要]auth_type請求的 OAuth 類型。支援的值為 ImplicitGrant

  • [必要]redirect_uri為應用程式註冊的重新導向 URI 以接收存取字符。

  • [選用]scopes逗號分隔範圍清單。若未指定,將會使用該註冊期間選擇的範圍清單。

  • [選用]state與存取字符一同傳回的字串。

注意

如果您在透過命令列介面或 API 存取 AWS 時,需要 FIPS 140-2 驗證的加密模組,請使用 FIPS 端點。如需有關 FIPS 和 FIPS 端點的詳細資訊,請參閱聯邦資訊處理標準 (FIPS) 140-2 概觀

範例 GET 請求以啟動 OAuth 流程以取得存取字符:

GET https://auth.amazonworkdocs.com/oauth?app_id=my-app-id&auth_type=ImplicitGrant&redirect_uri=https://myapp.com/callback&scopes=workdocs.content.read&state=xyz

下列項目會在 OAuth 授權流程期間發生:

  1. 應用程式使用者會收到輸入 Amazon 的提示訊息 WorkDocs 網站名稱。

  2. 使用者被重新導向至 Amazon WorkDocs 輸入其憑證的驗證頁面。

  3. 在成功驗證身分後,同意畫面將會出現,允許該使用者授與或拒絕您應用程式存取 Amazon 的授權 WorkDocs。

  4. 在使用者選擇同意畫面上的 Accept 後,他們的瀏覽器將重新導向至您應用程式的回呼 URL,以及做為查詢參數的存取字符與區域資訊。

的範例 GET 請求 WorkDocs:

GET https://myapp.com/callback?acessToken=accesstoken&region=us-east-1&state=xyz

除了訪問令牌,亞馬遜 WorkDocs OAuth 服務也會傳回region作為所選亞馬遜的查詢參數 WorkDocs 網站。外部應用程式應該使用region參數來確定亞馬遜 WorkDocs 服務端點。

如果您在透過命令列介面或 API 存取 AWS 時,需要 FIPS 140-2 驗證的加密模組,請使用 FIPS 端點。如需有關 FIPS 和 FIPS 端點的詳細資訊,請參閱聯邦資訊處理標準 (FIPS) 140-2 概觀

呼叫 Amazon WorkDocs API

在取得存取字符之後,您的應用程式可以進行 API 呼叫至 Amazon WorkDocs服務。

重要

這個例子演示了如何使用 curl GET 請求來獲取文檔的元數據。

Curl "https://workdocs.us-east-1.amazonaws.com/api/v1/documents/{document-id}" -H "Accept: application/json" -H "Authentication: Bearer accesstoken"

範例 JavaScript 描述使用者根資料夾的函數:

function printRootFolders(accessToken, siteRegion) { var workdocs = new AWS.WorkDocs({region: siteRegion}); workdocs.makeUnauthenticatedRequest("describeRootFolders", {AuthenticationToken: accessToken}, function (err, folders) { if (err) console.log(err); else console.log(folders); }); }

以 Java 為基礎的 API 呼叫範例描述如下:

AWSCredentialsProvider credentialsProvider = new AWSCredentialsProvider() { @Override public void refresh() {} @Override public AWSCredentials getCredentials() { new AnonymousAWSCredentials(); } }; // Set the correct region obtained during OAuth flow. workDocs = AmazonWorkDocsClient.builder().withCredentials(credentialsProvider) .withRegion(Regions.US_EAST_1).build(); DescribeRootFoldersRequest request = new DescribeRootFoldersRequest(); request.setAuthenticationToken("access-token-obtained-through-workdocs-oauth"); DescribeRootFoldersResult result = workDocs.describeRootFolders(request); for (FolderMetadata folder : result.getFolders()) { System.out.printf("Folder name=%s, Id=%s \n", folder.getName(), folder.getId()); }