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?

0 ответов

Другие вопросы по тегам