草庐IT

android - GoogleAuthUtil 类似于 iOS 的设备身份验证,用于验证请求是否来自 Apple 设备

coder 2023-07-28 原文

Google Auth Util让 Android 开发人员验证他们的服务器收到的请求是否来自 Android 设备。

设备根据与设备相关联的 Google 帐户从 Google 获取 token ,然后来自设备的请求连同该 token 一起发送到服务器,然后服务器询问 Google token 是否有效。任何 key 都保留在应用程序源之外,因此恶意人员无法破解应用程序并访问私钥和对服务器的捏造请求。

我找了一段时间,似乎 Apple 没有提供类似的东西,但我希望有一些功能类似的东西可以用于 iOS。

最佳答案

更新

虽然问题中隐含的假设看似合理,但实际上并非如此。进一步阅读 Google 资源表明,Auth Util(以及后来的 Firebase)的目的是验证用户身份并保护服务器。由于服务器只看到网络流量,因此可以从另一个客户端复制流量。

此外,Android 的定义相当模糊,因为 OEM 会修改基本操作系统以满足他们的需求。

这可能是错误的

<罢工> 一种选择是使用 Apple Push Notification .您可以注册一个设备和push notifications specifically to it .当您的应用程序加载时,它会向服务器发送一个请求及其 device token并通过 APN 接收本质上是 session cookie 的内容。

需要注意的是 it is not encrypted .您可以通过在请求中发送随机生成的对称 key 轻松解决此问题。您获得的 cookie 将在服务器上加密,并在 iOS 设备中使用相同的 key 解密。

这解决了在源中存储 key 的问题,并证明请求来自 iOS 设备。

当然,这可以简化为生成证书,将其存储在 key 链中,并在注册时将私钥发送到服务器进行存储。使用 APN 进行初始注册和验证后,可以使用设备 ID + 证书公钥对后续消息进行签名。

最后一个问题是 APN 也可用于注册 OSX 设备。我还没有弄清楚如何排除那些(还)。

免责声明:写规范已经很长时间了。我对使用 APN 初始注册 iOS 设备的机制相当满意。我可能弄错了加密部分。如果是这样,请轻轻地评论。

关于android - GoogleAuthUtil 类似于 iOS 的设备身份验证,用于验证请求是否来自 Apple 设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25878747/

有关android - GoogleAuthUtil 类似于 iOS 的设备身份验证,用于验证请求是否来自 Apple 设备的更多相关文章

  1. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  2. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  3. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  4. ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0 - 2

    我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val

  5. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  6. ruby-on-rails - 如何将验证与模型分开 - 2

    我有一些非常大的模型,我必须将它们迁移到最新版本的Rails。这些模型有相当多的验证(User有大约50个验证)。是否可以将所有这些验证移动到另一个文件中?说app/models/validations/user_validations.rb。如果可以,有人可以提供示例吗? 最佳答案 您可以为此使用关注点:#app/models/validations/user_validations.rbrequire'active_support/concern'moduleUserValidationsextendActiveSupport:

  7. ruby-on-rails - 跳过状态机方法的所有验证 - 2

    当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested

  8. ruby - 如何在 Rails 4 中使用表单对象之前的验证回调? - 2

    我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser

  9. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  10. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

随机推荐