【问题标题】:IntentFilter not working with HTTP redirect URLIntentFilter 不适用于 HTTP 重定向 URL
【发布时间】:2020-05-08 01:27:09
【问题描述】:

TL;DR:

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

看起来IntentFilter 不能像那样拦截 URL,只有在打开新标签时才可以,而不是在导航时。

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


我正在尝试将“使用 LinkedIn 登录”按钮添加到我的 Xamarin.Forms 应用程序。我正在使用Xamarin.AuthCustom Tabs 方法。

也就是说,为了得到登录+授权的结果,我需要使用一个IntentFilter。 使用 Google 的身份验证正在工作,因为我复制了它from here,但使用 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();
    }
}

LinkedIn 配置:

【问题讨论】:

  • 您是否尝试过像链接中的示例一样将DataPath 设置为/oauth2redirect,并将DataSchemes 设置为从Google 上项目的Android 客户端ID 获得的反向客户端标识符API 控制台
  • LinkedIn 重定向 URL 必须是有效的 HTTP/HTTPS。我无法向其中添加自定义方案。因此,我不能有不同的设置。

标签: c# xamarin xamarin.android intentfilter


【解决方案1】:

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

我不熟悉“自定义选项卡”方法,但我想使用 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 将认证结果转发给正在等待认证结果的 App。

无论如何,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 的具体信息。

【讨论】:

  • 那是我的Redirect URL。我的Authorization URL 是正确的,身份验证甚至可以工作,只是IntentFilter 不起作用。我还没有网站,所以我尝试使用不存在的 URL。
  • “自定义选项卡”方法是一种使用浏览器原生 UI 显示身份验证登录的方法。这意味着身份验证登录不会显示在我的应用程序内部的 WebView 中,而是显示在外部。这就是为什么需要IntentFilter,以便在用户完成授权时获得结果。
猜你喜欢
  • 1970-01-01
  • 2014-12-02
  • 1970-01-01
  • 1970-01-01
  • 2015-12-30
  • 1970-01-01
  • 1970-01-01
  • 2018-12-23
  • 1970-01-01
相关资源
最近更新 更多