c# - 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();
}
}
领英配置:
解决方案
我认为您的授权 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 流程似乎比您想象的要多一些。看:
和
有关如何使用 OAuth 连接到 LinkedIn 的具体信息。
推荐阅读
- openshift - OpenShift 3.x。使用不会过期的令牌访问内部注册表
- html - 导航栏中的分隔符不在导航项之间居中
- python - 在 pandas 中使用“del”命令删除一行
- python - 将向量与矩阵元素相乘
- tfs - TFS:如何在项目中为每个工作项设置权限?
- amazon-web-services - Pulumi:如何序列化输出
[] 转 JSON - uipath - UiPath - 如何从 Delegate:Body 变回来?
- javascript - 使用数组和对象形成对象数组
- spring-boot - 如何在 Spring DataJpa @Query 方法中将 Object[] 作为返回类型?
- mysql - MySQL Workbench 需要永远运行一个 2GB 的 SQL 脚本