Sim*_*imo 11 passwords authorization login oauth-2.0
我现在正在阅读oauth2,并试图了解其目的.从我阅读的所有资源中,似乎oauth2仅在具有某些用户和应用程序的webapp(比如游戏应用程序)想要访问用户的Facebook或Google数据(某些类型的数据,如姓名或电子邮件,等等).这部分对我来说很清楚.但是,我不清楚的事情如下:
我见过webapps,他们只是让用户注册ID和密码,然后他们将密码加密并将盐存储在数据库中.因此,当用户稍后登录时,他们会将用户输入的密码加密,并将此盐与数据库中的盐(在注册期间创建)进行比较.如果相等,则用户登录.这对我来说似乎不起誓.所以,如果这不是oauth,那么这个标准是什么?这样的"直接登录"还有其他标准吗?
假设我想允许用户注册并登录我的网站,但让他们通过第三方(如Facebook或Google)登录.这仅用于授权目的,并假设我的应用程序没有计划在他们的Facebook上发布或请求他们的Facebook数据,除了我可能想要使用他们的Facebook电子邮件作为我的webapp的用户ID.oauth2是否提供此类授权?
抱歉天真的问题,因为我最近只读过oauth.
对于没有第三方的注册/登录,正如Kevin指出的,每个编程/Web框架通常都会附带一个流行的库,一旦它就会生成所有的注册/登录页面、数据库表、流程等,为你。然后,您要做的唯一一件事就是当您需要确定用户是谁时,在后端代码中调用库提供的返回当前登录用户的方法。
正如您所指出的,使用加盐密码方案与OAuth 2.0完全无关。它是一种广泛使用的本地身份验证方案,因为它有很多好处,但我在这里只强调 2 个:
A。当通过互联网从用户传输到服务器进行身份验证时,密码不是以明文形式发送,而是以散列格式发送。这样即使被窃听,密码也不会泄露。
b. 由于每个密码都是加盐的,因此即使 2 个相同的密码也不会具有相同的哈希值,因为每个密码都有不同的盐。因此,即使密码散列被窃听,它也不能在用户使用相同密码的另一个服务中重复使用,因为其他服务期望使用不同的盐生成密码散列。
要使用 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) 之间的中间人。
如果您没有时间深入阅读 OAuth2,也许对所有 OAuth2 流程进行并排比较会有所帮助。
这是由https://blog.oauth.io/introduction-oauth2-flow-diagrams/提供的
您可以像这样使用 OAuth 进行本地登录,但您不必这样做。这可能会更容易,具体取决于可用的库,并且如果您预计将来向第三方提供您的服务,这可能是有意义的。不过,对于许多站点来说,使用 OAuth 进行本地登录可能有些过分了。
当不同的参与者需要使用共同语言以便进行互操作时,标准是最有用的。对于本地登录,您不需要标准,因为您不与任何第三方交互。许多 Web 框架都在相同的基本流程上包含了自己的变体。
我认为您是在问,当您实际上不需要任何授权(访问第三方资源的权限)时,OAuth 对于身份验证(建立身份)是否有意义。它确实可以这样使用,但很多人会警告它,因为它不是为此设计的,并且在这种情况下存在一些安全漏洞。例如,请参阅使用 OAuth 进行身份验证的常见陷阱。
| 归档时间: |
|
| 查看次数: |
1499 次 |
| 最近记录: |