首页 > 解决方案 > IntentFilter 不适用于 HTTP 重定向 URL

问题描述

TL;博士:

IntentFilter当 LinkedIn 授权完成并且导航到重定向 URL 时,不会拦截 URL。

看起来IntentFilter无法像那样拦截 URL,只有在打开新选项卡时才打开,而不是在导航时。

而且由于 LinkedIn 只接受带有 HTTP/HTTPS 的重定向 URL,我有点锁定这个问题。我现在唯一的解决方案是使用WebView.


我正在尝试向我的Xamarin.Forms应用程序添加“使用 LinkedIn 登录”按钮。我正在使用Xamarin.Auth这种Custom Tabs方法。

这意味着为了得到登录+授权的结果,我需要使用一个IntentFilter。使用 Google 的身份验证正在工作,因为我从这里复制了它,但是使用 LinkedIn 的身份验证没有被IntentFilter.

我不确定出了什么问题。也许重定向 URL 不正确,或者我IntentFilter有一些问题。

我尝试使用不同的 URL,即使localhost:PORT没有成功。

意图过滤器:

[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();
    }
}

领英配置:

重定向网址

标签: c#xamarinxamarin.androidintentfilter

解决方案


我认为您的授权 URL 不正确。您正在使用“/Act/Callback”应该是“/oauth/v2/authorization”

我不熟悉“自定义选项卡”方法,但我想使用 OAuth 进行身份验证需要相同的基本步骤。

您的重定向 URL 应该是用户在其网站上进行身份验证后 LinkedIn 回调的位置。这可能类似于“ http://www.yoursite.com/oauth/v2/linkedin ”。您的应用需要配置为在该地址上侦听传入的 http 或 https 连接。这通常是一个 Web 服务器,但在 C# HttpListener 也可以工作。Xamarin.Auth可能已经为您内置了这个,但我不熟悉 OAuth 的这种确切实现。(你说它适用于谷歌,所以我想它在某种程度上适用)

如果您的应用程序在多个设备上独立运行,则可能无法将所有设备地址添加到允许的重定向列表中。如果是这种情况,您将不得不像这样设置您的应用程序:

应用程序通知 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

有关如何使用 OAuth 连接到 LinkedIn 的具体信息。


推荐阅读