jjzjj

php - 使用 oAuth 或其他方式实现访问

coder 2024-04-15 原文

我正在想办法向其他第三方网站开放网站及其数据库的一部分,类似于 Twitter 让网络应用程序连接到其数据库以检索数据并可能存储数据的方式。

我最初的研究让我想到了 oAuth(或者它是 openID?)。

我需要做的是让第三方网站登录用户在该网站的账户,但只能读写属于自己的数据,不能触及属于其他第三方网站的数据?

我对 oAuth 的细节有点模糊。我是否需要创建某种 API,或者 oAuth 是我唯一需要实现的东西吗?如您所见,我不确定如何执行此操作,所以来自更专家的任何解释都会有所帮助。

如果我实现 oAuth,其他第三方网站是否能够访问该网站的数据?

我可以让其他第三方网站将用户注册到主网站而用户不必访问主网站吗?有人认为这是个坏主意吗?是/否,为什么?

oAuth 如何帮助我确保第三方网站不会读取/写入/更改与另一个第三方网站相关的用户数据。

我确信这比我想象的要容易,但我是 oAuth 的新手,所以情况还不清楚。

最佳答案

首先,我们要明确 OAuth 和 OpenID 是两个独立的事物。 OpenID 旨在仅用于身份验证。 OAuth 用于身份验证和授权。在这种情况下,授权指的是客户端应用程序被授权访问和更新与经过身份验证的用户关联的数据。

What I need to do is let the third party websites login to a user's account on the website, but only read and write data that belongs to them and not be able to touch data that belong to other third party websites?

如果存储在每个第三方网站上的数据与存储在您的身份验证服务器上的数据互斥,那么您可能希望坚持使用 OpenID。

但是,如果您希望第三方网站更新应与所有其他第三方网站共享的用户信息(即名字、姓氏、街道地址、信用卡信息等),则你可能想要使用 OAuth。我知道有一个 OpenID 规范的扩展允许这种事情(实际上,你可以调整它以适应你自己的实现),但在一般意义上,这种事情属于 OAuth。

I'm a bit fuzzy of the details of oAuth. Do I need to create some sort of an API or is oAuth the only thing I need to implement?

除了请求 token 和使用 OAuth 服务器授权客户端应用程序的初始细节之外,您还必须实现其他方法来检索和更新有关经过身份验证的用户的信息。例如,Twitter 要求您的应用程序通过特定用户的身份验证并获得更新用户状态的授权。除了基本的 OAuth 实现之外,该更新状态方法是其 API 的一部分。

If I implement oAuth, will other third party websites be able to access data from the website? Does anyone think this is a bad idea? yes/no and why?

这些网站将只被允许访问已通过您的 OAuth 服务器授权该网站访问其数据的用户的数据。但是,只有那些具有有效消费者 key 的网站才能请求正确的 token 以开始 OAuth session 。因此,只有您授权的网站才能与您的服务器进行交互。

这些代币总是有可能通过 Session Fixation 被劫持.但这种担心不应阻止您实现 OAuth 服务。这并不意味着不用担心。只是不要让它成为障碍。

Can I let other third party websites register the user to the main website without the user having to visit the main website?

不适用于 OAuth 定义的当前规范。 OAuth 背后的想法是您的用户在 OAuth 服务器上注册。您的第三方客户端使用此服务器作为身份验证点。但是,这并不意味着如果应用程序有某种“主”帐户用于登录(尽管这是它自己的安全风险),则您不能实现某种 API 来注册用户。只是不推荐。

and how does oAuth help me make sure that a third party websites does not read/write/change user data related to another third party website?

仅仅因为您使用 OAuth 并不意味着您的第三方网站不能将数据存储在他们自己的数据存储中。 Flickr 和 Twitter 都提供 OAuth 服务,但都没有在各自的服务器上存储彼此的信息(没有 flickr 照片存储在 Twitter 的数据库中)。

只要您不在 OAuth 服务器上存储特定于每个应用程序的信息,就不会有问题。请记住,OAuth 服务器用于对用户进行身份验证并存储应由所有应用程序共享的基本信息。我会在这里重申,如果您只想对用户进行身份验证,那么请坚持使用 OpenID。

编辑

Can I segment the permissions such that when the user authorizes site A, he doesn't authorize it to his full account, but just authorizes it to access its own data on his account? Can oAuth do this?

在您的实现中,您可以。这将是检查与用于访问该 OAuth 端点的访问 token 关联的消费者 key 的问题。请记住,每次调用 API 的授权部分都必须包含访问 token 。因此,如果您想将该端点锁定到特定应用程序,您可以通过访问 token 和消费者 key 对其进行检查,这是有道理的。

关于php - 使用 oAuth 或其他方式实现访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3932456/

有关php - 使用 oAuth 或其他方式实现访问的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  6. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

  7. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  8. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  9. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  10. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

随机推荐