繁体   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