Xamarin.Auth с параметром accesstokenurl не работает
Я пытаюсь использовать Xamarin.Auth для аутентификации у поставщика OAuth2.
Если вы создаете экземпляр OAuth2Authenticator без параметра accessTokenUri, все работает отлично. Однако, если экземпляр OAuth2Authenticator создается с параметром accessTokenUri, все работает не так, как ожидалось. Я использую Xamarin.Auth на автономном проекте Xamarin.Android и вижу, что ответ (Intent.Data) на CustomUrlSchemeInterceptorActivity имеет код (код авторизации), но поток кода всегда попадает в обработчик ошибок в экземпляре OAuth2Authenticator. завершенного обработчика событий.
Вот мой код, который инициализирует объект OAuth2Authenticator:
private async void Button_Click(object sender, System.EventArgs e)
{
try
{
var authenticator = new OAuth2Authenticator(
clientid,
null,
"openid profile",// Tried pass in "" & null as well
new Uri(authorizationServerUrl),
new Uri(redirectUrl), // com.companyname.appname://oidc_callback
new Uri(accessTokenUrl),
null,
true)
{
ShowErrors = true,
AllowCancel = false
};
authenticator.Completed += async (sender1, args) =>
{
string accessToken = null;
if (args.IsAuthenticated)
{
var userName = args.Account?.Username;
var properties = args.Account?.Properties;
var cookies = args.Account.Cookies;
accessToken = args.Account.Properties["access_token"];
}
};
authenticator.Error += async (errorSender, args) =>
{
try
{
var message = args.Message;
bool hasCompleted = authenticator.HasCompleted;
}
catch (Exception ex)
{
string message = ex.Message;
Console.WriteLine(message);
}
};
authenticator.BrowsingCompleted += (browserSender, args) =>
{
};
Authenticator = authenticator;
Presenter.Login(authenticator);
}
catch (Exception ex)
{
string message = ex.Message;
throw;
}
Вот действие CustomUrlSchemeInterceptorActivity
[Activity(Label = "CustomUrlSchemeInterceptorActivity", NoHistory = true, LaunchMode = Android.Content.PM.LaunchMode.SingleTop)]
[IntentFilter(
new[] { Intent.ActionView },
Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },
DataScheme = "com.companyname.appname"
)]
public class CustomUrlSchemeInterceptorActivity : Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
global::Android.Net.Uri uri_android = Intent.Data;
// Convert Android.Net.Uri to C#/netxf/BCL System.Uri - common API
Uri uri_netfx = new Uri(uri_android.ToString());
// load redirect_url Page
MainActivity.Authenticator.OnPageLoading(uri_netfx);
this.Finish();
}
}
Почему, хотя Intent.Data в CustomUrlSchemeInterceptorActivity отображает код авторизации, но обработчик ошибок объекта OAuth2Authenticator всегда запускается вместо обработчика события Completed?