Facebook文档声明
App Secret或App Access令牌绝不应包含在任何内容中 除了开发者以外的任何人都可以访问的代码 应用程序。这适用于所有未受保护的代码方法 客户端代码(如HTML或Javascript)或本机应用程序(如 可以反编译的iOS,Android或Windows桌面应用程序)。 https://developers.facebook.com/docs/facebook-login/security#appsecret
出于这个原因,如果你的应用类型'在应用程序的高级设置下 仪表板设置为Native / Desktop我们假设您的原生应用程序 包含二进制文件中的App Secret或App Access Token,我们 不允许使用App Access Token签名的呼叫继续。 API 将表现得好像没有提供访问令牌。
因此,如果您在应用程序中嵌入App Secret并告诉Facebook有关它,它将停止使用OAuth(我也测试了这一点,当您检查该选项时,Facebook会停止验证该秘密)。
但是Xamarin.Auth 1.3(最新稳定版)要求clientSecret(在OAuth2Authenticator类中clientSecret是必需参数)并在用户成功登录时使用它来获取Facebook访问令牌。
这是一个错误,是否有解决方法,或Xamarin.Auth现在对Facebook没用?
答案 0 :(得分:1)
我们不要混淆事情。这与Xamarin.Auth无关。
OAuth2有两个主要选项:
隐式流程不需要客户端密钥。隐式流程通常与移动应用程序一起使用,因为它们无法保密(您可以反汇编应用程序二进制文件并找到秘密)。与Javascript或桌面应用程序相同。保护秘密的唯一方法是将其存储在第三方(=用户)无法访问的服务器上。
授权代码流使用客户端机密作为additional protection,该机密识别特定方,如服务器。
那Facebook是什么状态?他们说,如果您将应用程序配置为Facebook仪表板中的本机/桌面应用程序,他们会假设(!)您将秘密存储在二进制文件中,因为:它还会去哪里?因此,这个秘密不再是一个真正的秘密,因此Facebook API就好像秘密不存在一样。
两种解决方案:
回答你的初步问题:是的,Xamarin.Auth支持Facebook的OAuth2,因为它就像任何其他OAuth2一样。
答案 1 :(得分:1)
OAuth2Authenticator
包含多个构造函数,其中一个不需要ClientSecret
:
public OAuth2Authenticator (string clientId, string scope, Uri authorizeUrl, Uri redirectUrl, GetUsernameAsyncFunc getUsernameAsync = null)
这个将允许 OAuth2 Implicit flow ,因此不需要将客户机密码存储在您的应用程序代码中。