gpt4 book ai didi

c# - 使用 Azure AD B2C 登录 Xamarin Android 应用

转载 作者:行者123 更新时间:2023-12-05 04:09:57 25 4
gpt4 key购买 nike

经过一周的研究可与 Azure AD B2C 一起使用 Xamarin 以 Android 平台(而非 Xamarin.Forms)为目标的身份验证原理,我终于寻求一些建议。

我有一个带有“登录”按钮的事件,我想通过该按钮的触摸事件登录到 Azure。理想情况下,我希望在登录步骤完成后收到 token 。

这是我到目前为止的代码:

public class MainActivity : Activity
{
public TaskCompletionSource<bool> ActivityResult { get; set; }
public const int LocationActivityResult = 110;
private static string AadInstance = "https://login.microsoftonline.com/{0}.onmicrosoft.com/";

private PublicClientApplication _publicClientApplication;
private string _authority;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);

// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);

//partie pour le sign in

EditText editTextEmail = FindViewById<EditText>(Resource.Id.editTextEmail);
EditText editTextPassword = FindViewById<EditText>(Resource.Id.editTextPassword);
Button signIn = FindViewById<Button>(Resource.Id.buttonSignIn);

signIn.Click += async (sender, e) =>
{

ConnectivityManager connectivityManager = (ConnectivityManager)GetSystemService(ConnectivityService);
NetworkInfo networkInfo = connectivityManager.ActiveNetworkInfo;
if (networkInfo == null)
{
Toast.MakeText(this, "Aucune connexion internet", ToastLength.Short).Show();
Intent intent = new Intent(this.ApplicationContext, typeof(NotInternetActivity));
intent.SetFlags(ActivityFlags.NewTask);
StartActivity(intent);
}
else
{

/////essai pour la connexion
_authority = string.Format(AadInstance, _azureSettings.Tenant);
_publicClientApplication = new PublicClientApplication(
_authority,
_azureSettings.ClientId

);
await AcquireTokenAsync();

/////passe sur la nouvelle actvité

Intent intent = new Intent(this.ApplicationContext, typeof(PlantsActivity));
intent.SetFlags(ActivityFlags.NewTask);
StartActivity(intent);

}

};

}
Authentication _azureSettings = new Authentication
{
ClientId = "ClientId",
ForgotPasswordPolicy = "ForgotPasswordPolicy",
SignInOrSignUpPolicy = "SignInOrSignUpPolicy",
Tenant = "Tenant"

};

protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if (requestCode.Equals(LocationActivityResult))
{
if (CrossGeolocator.Current.IsGeolocationEnabled)
this.ActivityResult.TrySetResult(true);
else
this.ActivityResult.TrySetResult(false);
}
else
{
AuthenticationAgentContinuationHelper.SetAuthenticationAgentContinuationEventArgs(requestCode, resultCode, data);
}
}

public class Authentication
{
public string Tenant { get; set; }
public string ClientId { get; set; }
public string SignInOrSignUpPolicy { get; set; }
public string ForgotPasswordPolicy { get; set; }
}

public Task<AuthenticationResult> AcquireTokenSilentAsync()
{
string[] scopes = { _azureSettings.ClientId };
var res = _publicClientApplication.AcquireTokenSilentAsync(scopes, "", _authority, _azureSettings.SignInOrSignUpPolicy, false);
return _publicClientApplication.AcquireTokenSilentAsync(scopes, "", _authority, _azureSettings.SignInOrSignUpPolicy, false);
}

public async Task<AuthenticationResult> AcquireTokenAsync()
{
string[] scopes = { _azureSettings.ClientId };
return await _publicClientApplication.AcquireTokenAsync(scopes, "", UiOptions.SelectAccount, string.Empty, null, _authority, _azureSettings.SignInOrSignUpPolicy);
}
}

我现在已将所有内容放在同一类中,只是为了测试结果。您可以给我提供的任何示例或您也可以指出我的有关 Xamarin.Android 的任何文档都会非常有帮助。

提前致谢。

最佳答案

所以在花了几周时间之后我终于能够做到了。

因此,我的应用程序现在具有 Azure AD B2C 后端,我可以从 Xamarin Android( native )应用程序进行身份验证并从我的 Easy Tables 访问数据。

其工作原理如下:

您需要的第一件事是从 Azure B2C 获取 token ,因此一旦成功,authResult 将保存新用户,您可以在其中访问 token 和用户名。

PublicClientApplication publicClientApplication = new PublicClientApplication(AuthParameters.Authority, AuthParameters.ClientId);
var authResult = await publicClientApplication.AcquireTokenSilentAsync(AuthParameters.Scopes, "", AuthParameters.Authority, AuthParameters.Policy, false);
// await Navigation.PushAsync(new SecurePage());
var result = authResult.Token;

textbox.Text = authResult.User.Name;

第二件事是通过 loginasync 将 token 发送到您的 mobileserviceclient..

JObject payload = new JObject();
payload["access_token"] = authResult.Token;
try
{
var user = await MobileService.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, payload);
}

这是存储所需数据的 AuthParameters 类:

public class AuthParameters
{
public const string Authority = "https://login.microsoftonline.com/YOURSITE.onmicrosoft.com/";
public const string ClientId = "Client ID from B2C APP";
public static readonly string[] Scopes = { ClientId };
public const string Policy = "POLICY_NAME_FROM_B2CTenant";
}

现在,在 Azure 门户上,您应该拥有一个事件的 Azure B2C 应用程序和一个移动服务客户端。它们应该链接在一起,链接它们的方式是通过这个链接

https://developer.xamarin.com/guides/xamarin-forms/cloud-services/authentication/azure-ad-b2c-mobile-app/

现在您应该能够通过 MobileServiceClient 正常访问您的简单表

关于c# - 使用 Azure AD B2C 登录 Xamarin Android 应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45147054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com