IntentFilter не работает с URL перенаправления HTTP - PullRequest
0 голосов
/ 22 января 2020

TL; DR:

IntentFilter не перехватывает URL-адрес, когда авторизация LinkedIn завершена и происходит переход к URL-адресу перенаправления.

Похоже, IntentFilter не может перехватить URL такой, только если открыта новая вкладка, а не при навигации.

И поскольку LinkedIn принимает только URL-адреса перенаправления с HTTP / HTTPS, я как бы заблокирован в этом вопросе. Мое единственное решение сейчас состоит в том, чтобы использовать WebView.


Я пытаюсь добавить кнопку «Войти через LinkedIn» в мое приложение Xamarin.Forms. Я использую Xamarin.Auth с подходом Custom Tabs.

Это означает, что для получения результата логин + авторизация мне нужно использовать IntentFilter. Аутентификация с использованием Google работает, так как я скопировал ее отсюда , но аутентификация с использованием LinkedIn не перехватывается IntentFilter.

Я не уверен, что не так. Возможно, URL-адрес перенаправления неверен, или, возможно, у моего IntentFilter есть какая-то проблема.

Я пытался использовать разные URL, даже localhost:PORT, но безуспешно.

IntentFilter:

[Activity(Label = "LinkedInInterceptorActivity", NoHistory = true, LaunchMode = LaunchMode.SingleTop)]
[IntentFilter(new[] { Intent.ActionView }, Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },
    DataSchemes = new[] { "http", "https" }, DataHost = "www.linkedin.com", DataPath = "/Act/Callback")]
public class LinkedInInterceptorActivity : Activity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        //Convert Android.Net.Url to Uri
        var uri = new Uri(Intent.Data.ToString());

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

        var intent = new Intent(this, typeof(MainActivity));
        intent.SetFlags(ActivityFlags.ClearTop | ActivityFlags.SingleTop);
        StartActivity(intent);

        Finish();
    }
}

Конфигурация LinkedIn:

RedirectUrls

1 Ответ

0 голосов
/ 22 января 2020

Я не думаю, что ваш URL авторизации правильный. Это должно быть "/ oauth / v2 / authorization", которое вы используете "/ Act / Callback"

Я не знаком с подходом "Custom Tabs", но я бы представил те же базовые c шаги для аутентификации необходимо использовать OAuth.

Ваши URL-адреса перенаправления должны быть такими, на которые LinkedIn перезванивает после аутентификации пользователя на своем сайте. Это может быть что-то вроде "http://www.yoursite.com/oauth/v2/linkedin". Ваше приложение должно быть настроено на прослушивание этого адреса для входящих соединений http или https. Обычно это веб-сервер, но на C# HttpListener также будет работать. Xamarin.Auth , возможно, это уже встроено для вас, но я незнаком с этой точной реализацией OAuth. (Вы говорите, что это работает для Google, поэтому я предполагаю, что это работает в некоторой степени)

Если ваше приложение работает независимо на нескольких устройствах, может быть невозможно добавить все адреса устройств в список разрешенных перенаправлений. В этом случае вам необходимо настроить приложение (-и), аналогичное следующему:

Приложение уведомляет yoursite.com о том, что оно ожидает аутентификации. Приложение направляет пользователя в LinkedIn для аутентификации. LinkedIn перезванивает yoursite.com (который является разрешенным перенаправлением) и отправляет результат аутентификации. yoursite.com передает результат аутентификации приложению, которое ожидает результата аутентификации.

Несмотря на то, что кажется, что поток OAuth немного больше, чем вы думаете. См .:

https://docs.microsoft.com/en-us/linkedin/shared/authentication/authorization-code-flow?context=linkedin / context

и

https://docs.microsoft.com/en-us/linkedin/shared/authentication/client-credentials-flow?context=linkedin / context

Для указать c информацию о том, как подключиться к LinkedIn с помощью OAuth.

...