是oauth2仅在有第三方授权时使用?

问题描述 投票:8回答:2

我现在正在阅读oauth2,并试图了解其目的。从我阅读的所有资源中,似乎oauth2仅在具有某些用户和应用程序的webapp(比如游戏应用程序)想要访问用户的Facebook或Google数据(某些类型的数据,如姓名或电子邮件,等等)。这部分对我来说很清楚。但是,我不清楚的事情如下:

  1. 例如:如果我有一个webapp,我希望我的webapp用户使用他们的登录名和密码登录webapp(就像你使用gmail一样),而不使用任何第三方。 oauth2是否也提供此类授权?
  2. 我见过webapps,他们只是让用户注册ID和密码,然后他们将密码加密并将盐存储在数据库中。因此,当用户稍后登录时,他们会将用户输入的密码加密,并将此盐与数据库中的盐(在注册期间创建)进行比较。如果相等,则用户登录。这对我来说似乎不起誓。所以,如果这不是oauth,这是什么标准?这样的“直接登录”还有其他标准吗?
  3. 假设我想允许用户注册并登录我的网站,但让他们通过第三方(如Facebook或Google)登录。这仅用于授权目的,并假设我的应用程序没有计划在他们的Facebook上发布或请求他们的Facebook数据,除了我可能想要使用他们的Facebook电子邮件作为我的webapp的用户ID。 oauth2是否提供此类授权?

抱歉天真的问题,因为我最近只读过oauth。

login oauth-2.0 passwords authorization
2个回答
2
投票
  1. 您可以将OAuth用于此类本地登录,但您不必这样做。根据可用的库,它可能更容易,如果您预计将来可以向第三方提供服务,则可能会有所帮助。但是,对于许多网站来说,使用OAuth进行本地登录会有点过分。
  2. 当不同的参与者需要说一种共同的语言以便他们可以互操作时,标准是最有用的。对于本地登录,您不需要标准,因为您没有与任何第三方交互。许多Web框架在相同的基本流程中包含它们自己的变体。
  3. 我认为,当您实际上不需要任何授权(访问第三方资源的权限)时,您会问OAuth是否对身份验证(建立身份)有意义。它确实可以这样使用,但很多人会警告它,因为它不是为此设计的,并且在这种情况下有一些安全漏洞。例如,参见Common pitfalls for authentication using OAuth

0
投票
  1. 对于没有第三方的注册/登录,正如Kevin指出的那样,每个编程/ web框架通常都带有一个流行的库,一旦它生成所有的注册/登录页面,数据库表,流程等,为了你。您唯一要做的就是调用库提供的方法,当您需要确定用户是谁时,在您的后端代码中返回当前已登录的用户。
  2. 正如您所指出的,使用盐渍密码方案根本与OAuth2无关。它是一种广泛使用的本地身份验证方案,因为它有许多好处,但我将在这里强调2: 一个。从用户传输到服务器以通过Internet进行身份验证时的密码不是以明文形式发送的,而是以散列格式发送的。因此即使被窃听,密码也不会被泄露。 湾由于每个密码都被加密,因此即使是2个相同的密码也不会具有相同的哈希,因为每个密码都有不同的盐因此,即使密码哈希被窃听,也不能在用户使用相同密码的另一个服务上重用它,因为另一个服务期望使用不同的盐生成密码哈希。
  3. OAuth2完全与授权有关(要求用户允许代表她在另一个Web服务上执行某些操作,例如,要求用户访问她在Facebook上注册的电子邮件地址的权限)。使用它进行身份验证可能不安全(对于OAuth2隐式流)。为什么? OAuth2的最终结果是与许可相关联的访问密钥,例如“访问电子邮件地址的许可”。当您使用OAuth2结果(访问密钥)进行身份验证时,这意味着您假设“访问电子邮件地址的权限”意味着用户已成功通过Facebook进行身份验证,这样做似乎没问题。但是,想象一下,如果另一个站点也像您一样使用OAuth2进行身份验证;如果它收到具有“访问电子邮件地址权限”的访问密钥,则会假定您已通过Facebook验证,因此它将授予您访问属于该电子邮件地址的帐户的权限。您实际上可以使用从用户获得的访问密钥,并在另一个站点中以她身份登录,反之亦然。

要使用OAuth2进行身份验证,您需要将其与OpenID Connect(OIDC)一起使用,因为OAuth2-OIDC的最终结果包含一个id_token,其中aud(听众)字段标识了访问密钥的用户(https://openid.net/specs/openid-connect-core-1_0.html#IDToken),这会阻止访问密钥可以在不需要的地方重用。通过易于理解的图表的完整解释如下:https://www.slideshare.net/KhorSoonHin/the-many-flavors-of-oauth/36?src=clipshare

对于使用OAuth2进行登录的安全意识方式,另一个非常简单但可能令人不安的是使用资源所有者密码凭据,其中您的网站充当用户和OAuth2提供商(Facebook)之间的中间人。

  1. 显示“使用Facebook登录”按钮
  2. 当用户点击按钮时,提示用户输入Facebook用户名/密码
  3. 使用用户名/密码登录Facebook以确认身份验证并获取访问令牌。

如果您没有时间深入了解OAuth2,那么对所有OAuth2流程进行这种并排比较可能会有所帮助。

Comparing flow diagrams for all four OAuth2 flow/grant types

这是https://blog.oauth.io/introduction-oauth2-flow-diagrams/的礼貌

© www.soinside.com 2019 - 2024. All rights reserved.