共用方式為


使用 Web 服務驗證使用者

 

發行︰ 2017年1月

適用於: Dynamics 365 (online)、Dynamics 365 (on-premises)、Dynamics CRM 2016、Dynamics CRM Online

您可以使用 Microsoft Dynamics 365 的外部用戶端驗證功能,針對行動裝置 (例如,平板電腦和電話),以及 Windows 8 桌面,開發您的用戶端應用程式。 此功能也可用於非 .NET 應用程式。

本主題內容

驗證概觀

技術相依性

安全性

使用者登入與應用程式註冊

用戶端應用程式

OAuth 授權端點

探索 OAuth 端點 URL

指定 OAuth 資源

驗證概觀

建立現代和行動應用程式 (包括不是建立在 .NET Framework 的應用程式) 的開發人員,可以透過組織 Web 服務的 SOAP 及 OData 端點存取 Microsoft Dynamics 365 商務資料。 此 Web 服務支援 OAuth 2.0 通訊協定 的部分驗證功能。

下列清單描述現代和行動應用程式驗證支援:

  • 在 HTTP 授權標題中使用 JSON Web 權杖

  • 由外部應用程式 (在瀏覽器外) 驗證 OData 服務

  • 由外部應用程式 (在瀏覽器外) 驗證 Organization.svc/web (SOAP) 服務

技術相依性

需要下列技術,才能開發及執行使用 Microsoft Dynamics 365OData 與 SOAP Web 服務端點進行驗證的外部用戶端應用程式:

對於使用 Microsoft Dynamics 365OData 與 SOAP Web 服務端點進行驗證的外部用戶端應用程式開發及執行,下列技術是選擇性:

安全性

下列安全性資訊適用於此驗證功能:

  • 驗證權杖儲存在裝置上受保護的儲存空間。 若是 Windows 作業系統,使用 Windows 認證管理員。

  • 此功能對 HTTP 要求使用 傳輸層安全性 (TLS) 或安全通訊端層 (SSL)。

使用者登入與應用程式註冊

下列資訊與使用者登入與應用程式註冊相關。

  • Microsoft Azure Active Directory Authentication Library (ADAL) 使用者登入是由網頁瀏覽器內容所處理。

  • 應用程式註冊透過 Azure Active Directory (用於 Dynamics 365 (線上) 部署) 和 Active Directory Federation Services (AD FS) (用於內部部署或 網際網路對向部署 (IFD)) 管理。 您可以使用 Microsoft Azure 管理入口網站或 API,在 Dynamics 365 (線上) 中註冊應用程式。

用戶端應用程式

下列清單摘要外部用戶端應用程式可以執行的範圍作業:

  • 使用 OData 端點時,支援建立、擷取、更新及刪除作業。 沒有訊息執行或中繼資料擷取的支援。

  • 為現代和行動應用程式使用 SOAP 端點 (Organization.svc/web) 時,有完整 Web 服務功能集的存取權。

當您撰寫要呼叫 Web 服務的用戶端程式碼時,建議在每個服務呼叫之前透過 ADAL 要求 Token。 使用這個方式,ADAL 可以判斷是否重新使用存取 Token 的快取執行個體、要求新的 (使用重新整理 Token) 或提示使用者登入。

探索 OAuth 端點 URL

在執行階段探索 Web 服務驗證的授權單位的能力,相較於在應用程式或設定檔中硬式編碼 OAuth 提供者 URLs,是取得授權單位的替代方式。

探索程序首先傳送未經授權的 HTTP 要求,在 Authorization 標題中包含「Bearer」這個字,以及用戶組織的 SOAP 端點 URL 做為要求訊息。

GET /XRMServices/2011/Organization.svc HTTP/1.1 Host: <org>.crm.dynamics.com Authorization: Bearer

注意

bearer 挑戰現在這選擇性的。 執行 GET 但沒有授權標題,會產生相同的結果。

錯誤 401 傳回,回應包含 authorization_uri 參數。 此參數的值必須是授權單位 URL。

HTTP/1.1 401 Unauthorized WWW-Authenticate: Bearer authorization_uri=URI

只有在 SdkClientVersion 屬性出現在用戶組織的 SOAP 端點 URL 時,授權單位探索功能才可供 SOAP 用戶端使用。 範例 URL 如下所示。

https://contoso.crm.dynamics.com/XRMServices/2011/Organization.svc/web?SdkClientVersion=6.1.0.533;

SdkClientVersion 值可以是至少有一個小數點和大於 6.0.0002.0000 的任何版本號碼。 建議 SdkClientVersion 屬性值設定為連結至用戶端應用程式的 SDK 組件的產品組建版本。

下列程式碼範例示範如何取得授權單位 URL。 請注意,範例程式碼使用 Microsoft Azure Active Directory Authentication Library (ADAL),可取自 NuGet.org。 此程式庫也有 Android 以及 iOS 開放原始碼版本。


/// <summary>
/// Discover the authentication authority.
/// </summary>
/// <param name="serviceUrl">The URL of the organization's SOAP endpoint. </param>
/// <returns>The authority URL.</returns>
/// <remarks>The service URL must contain the SdkClient property.</remarks>
/// <example>https://contoso.crm.dynamics.com/XRMServices/2011/Organization.svc/web?SdkClientVersion=6.1.0.533;</example>
public static string DiscoveryAuthority(Uri serviceUrl)
{
    // Use AuthenticationParameters to send a request to the organization's endpoint and
    // receive tenant information in the 401 challenge. 
    Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationParameters parameters = null;
    HttpWebResponse response = null;
    try
    {
        // Create a web request where the authorization header contains the word "Bearer".
        HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(serviceUrl);

        // The response is to be encoded.
        httpWebRequest.ContentType = "application/x-www-form-urlencoded";
        response = (HttpWebResponse)httpWebRequest.GetResponse();
    }

    catch (WebException ex)
    {
        response = (HttpWebResponse)ex.Response;

        // A 401 error should be returned. Extract any parameters from the response.
        // The response should contain an authorization_uri parameter.
        parameters = Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationParameters.
            CreateFromResponseAuthenticateHeader((response.Headers)["WWW-Authenticate"]);
    }
    finally
    {
        if (response != null)
            response.Dispose();
    }
    // Return the authority URL.
    return parameters.Authority;
}

OAuth 授權端點

OAuth 探索的替代方式是使用已知的 OAuth 授權端點。 當撰寫使用 Microsoft Dynamics 365 (線上和內部部署) Web 服務進行驗證的應用程式,您需要在驗證程式碼中使用 OAuth 提供者 URLs,如下表所示。

部署

URL

Microsoft Dynamics 365 (線上)

HYPERLINK "https://login.windows.net/common/oauth2/authorize" https://login.windows.net/common/oauth2/authorize (多組織用戶)

https://login.windows.net/<tenant ID>/oauth2/authorize (單一組織用戶)

Microsoft Dynamics 365 (內部部署/IFD)

https://<serverFQDNaddress>/adfs/ls

在 Security Token Service (STS)URL 中,替代您的 IFD 伺服器位址,例如 contoso.com。 顯示的 STS URL 適用於 AD FS 的預設安裝。 非預設安裝可以使用不同 URL。 同樣地,請依指示替代您的用戶識別碼。

建議您一律使用 OAuth 探索與 Dynamics 365 (線上),因為授權端點可能在未來時間有所變更。

指定 OAuth 資源

當使用 OAuth 授權碼流程進行 Microsoft AzureActive Directory 驗證,您必須為目標資源提供值。 根組織網址 (例如 https://contoso.crm.dynamics.com) 必須做為 OAuth 授權端點呼叫中的「resource」查詢字串參數。

// Obtain an authentication token to access the web service.
String resource = “https://contoso.crm.dynamics.com”; 
_authenticationContext = new AuthenticationContext(_oauthUrl, false );
AuthenticationResult result = await _authenticationContext.AcquireTokenAsync( resource, clientID );

其他資訊:範例:Windows 8 桌面現代 OData 應用程式

另請參閱

建立新型行動應用程式
逐步解說:向 Active Directory 註冊 Dynamics 365 應用程式
在 Microsoft Dynamics 365 中驗證使用者
部落格:Azure AD 開發人員預覽新功能:Azure 驗證程式庫
使用 Azure Active Directory 的伺服器端 CRM 驗證

Microsoft Dynamics 365

© 2017 Microsoft. 著作權所有,並保留一切權利。 著作權