簡體   English   中英

如何使用AAD B2C對WPF應用程序進行身份驗證以訪問Azure應用服務

[英]How to Authenticate WPF Application with AAD B2C to gain access to Azure App Service

目前,我很想在我正在研究的項目中實施身份驗證。 該項目的最終目標是在Azure上托管兩個WPF應用程序和基於Web的應用程序。 一個WPF應用程序供管理員使用,另一個WPF應用程序供員工使用,最后一個Web應用程序供客戶使用。 每個應用程序都將連接到一個Azure應用程序服務以共享數據庫,並且需要進行身份驗證,以便將所有用戶分開。 對於身份驗證,我計划使用Azure Active Directory B2C。

我一直在研究並嘗試在其中一個WPF應用程序上實現此功能已有幾天,但正如我之前所說的那樣,我非常困惑。 據我了解,對WPF進行B2C身份驗證的唯一方法是通過客戶端管理的身份驗證。 遵循Azure教程網站,其他SO帖子和Azure Git Repos上顯示的代碼,我提出了以下代碼:

   System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
   authResult = await App.PublicClientApp.AcquireTokenAsync(App.ApiScopes,
       GetUserByPolicy(accounts, App.PolicySignUpSignIn), UIBehavior.SelectAccount, 
       string.Empty, null, App.Authority);
   Newtonsoft.Json.Linq.JObject payload = new Newtonsoft.Json.Linq.JObject();
   payload["access_token"] = authResult.AccessToken;
   MobileServiceClient msclient = new MobileServiceClient(App.AzureAppService);
   MobileServiceUser user = await msclient.LoginAsync(
        MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, payload);

一切開始都很順利,我可以顯示我的登錄策略。 登錄后,將獲得一個IdToken和一個AccessToken。 創建JObject並向其中添加訪問令牌之后,我嘗試使用它來登錄我的MobileServiceClient。 但這就是我遇到的問題。 無論我做什么,無論我嘗試什么,我都只會遇到401錯誤,告訴我我未經授權,這是一個異常。 這就是我過去幾天一直堅持的觀點。

顯然,我在這里沒有做任何特別的事情,我想很多人都在我之前做了這件事,但是我似乎無法超越這一點,並希望有人可以為我提供一些指導。 我會偏離軌道嗎? 有沒有更好的方法可以做到這一點? 任何建議都將不勝感激,因為我是Azure的新手。

謝謝大家!

更新:

這是我的Azure設置的方式:

在應用服務方面

Client Id: "{Client Id of the AAD B2C App}"
Issuer URL: "login.microsoft.com{TennatName}.onmicrosoft.com/v2.0/.well-known/openid-configuration"
Allowed Token Audiences: "https://{App Service Name}.azurewebsites.net" (App Service URL)

在B2C方面:

Web and native client enabled
Web Reply URL: "https://{AppServiceName}.azurewebsites.net/.auth/login/add/callback"
Native App: I did not know what custom redirect URL to have so I have both
"{TennatName}.onmicrosoft.com://auth/" and 
"{AppServiceName}.azurewebsites.net/.auth/login/add/callback"

更新2:

My authority is login.microsoftonline.com/tfp{tenant}/{policy}/oauth2/v2.0/authorize
And my ApiScopes = { "https://{Tenant}/thisisatest/user_impersonation" };

如果客戶端的權限設置為https://{your-tenant-name}.b2clogin.com/tfp/{your-tenant-name}.onmicrosoft.com/{your-policy-name}/ ,則應用服務中的發行者URL必須引用該授權的元數據; https://{your-tenant-name}.b2clogin.com/tfp/{your-tenant-name}.onmicrosoft.com/{your-policy-name}/v2.0/.well-known/openid-configuration

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM