Как получить токен доступа для аутентификации после аутентификации пользователей с помощью провайдера идентификации? - PullRequest
2 голосов
/ 03 марта 2020

Я работаю в проекте xmarine android c#. где я хочу получить доступ к контакту Google из моего приложения c# android. Для этого я использовал следующую ссылку: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/data-cloud/authentication/oauth Я не могу получить access_token в методе OnAuthCompleted. Как я могу это сделать?

Я даю свой код ниже для лучшего понимания.

public void googleAuthentication()
        {
            var authenticator = new OAuth2Authenticator(
                                Configuration.ClientID,
                                string.Empty,
                                "https://www.googleapis.com/auth/contacts",
                                new Uri("https://accounts.google.com/o/oauth2/v2/auth"),
                                new Uri(Configuration.RedirectUrl),
                                new Uri("https://www.googleapis.com/oauth2/v4/token"),
                                isUsingNativeUI: true);

            authenticator.Completed += OnAuthCompleted;
            authenticator.Error += Authenticator_Error;

            var a = authenticator.GetUI(this);
            StartActivity(a);            
        }

также я добавил еще одно действие в свой проект для пользовательской схемы URL согласно приведенной выше ссылке. но он не работает, код выглядит следующим образом:

[Activity(Label = "CustomUrlSchemeInterceptorActivity", NoHistory = true, LaunchMode = LaunchMode.SingleTop)]
    [IntentFilter(
        new[] { Intent.ActionView },
        Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },
        DataSchemes = new[] { "com.googleusercontent.apps.94221532031-00o4meh3gmmq4g8r3ersa6m3oskmbkat" },
        DataPath = "/oauth2redirect")]
    public class CustomUrlSchemeInterceptorActivity : Activity
    {
        public static OAuth2Authenticator Auth;
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            // Create your application here
            var uri = new Uri(Intent.Data.ToString());
            // Load redirectUrl page            
            CustomUrlSchemeInterceptorActivity.Auth.OnPageLoading(uri);
            Finish();
        }
    }

, пожалуйста, помогите мне, как получить access_token в asyn c void OnAuthCompleted (отправитель объекта, AuthenticatorCompletedEventArgs e) метод

1 Ответ

0 голосов
/ 04 марта 2020

Прежде всего, пожалуйста, убедитесь, что вы правильно включили настройки

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/data-cloud/authentication/oauth#setup

Обратите внимание: настройки учетных данных, если вы хотите запустить свой приложение в Android, вы должны установить тип приложения на Android. Если вы измените Oauth ID в консоли Google, вы можете получить результат, как на следующем скриншоте.

enter image description here

Вы сказали, что CustomUrlSchemeInterceptorActivity не работает, эта активность не появилась? Если это так, вы можете добавить макет, удалить Finish() и выполнить тест.

    [Activity(Label = "CustomUrlSchemeInterceptorActivity", NoHistory = true, 
    LaunchMode = LaunchMode.SingleTop)]
    [IntentFilter(
    new[] { Intent.ActionView },
    Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },
    DataSchemes = new[] { "com.googleusercontent.apps.991626672383-b159bdtjq2pt29r7hrm90qi7l3qet99j" },
    DataPath = "/oauth2redirect")]
public class CustomUrlSchemeInterceptorActivity : Activity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.layout1);
        // Convert Android.Net.Url to Uri
        var uri = new Uri(Intent.Data.ToString());

        // Load redirectUrl page
        AuthenticationState.Authenticator.OnPageLoading(uri);

        //Finish();
    }
}

Вот мое демо, запускающее GIF.

enter image description here

Я загружаю демо на github, вы можете обратиться к нему.

https://github.com/851265601/OAuthDemo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...