我正在阅读有关oauth2的内容,并试图了解其目的。从我阅读的所有资源中,似乎oauth2仅在具有某些用户和应用程序的webapp(比如游戏应用程序)想要访问用户的Facebook或Google数据(某些类型的数据,如姓名或电子邮件等)。这部分对我来说很清楚。但是,我不清楚的事情如下:
我见过webapps,他们只是让用户注册ID和密码,然后他们将密码加密并将盐存储在数据库中。因此,当用户稍后登录时,他们会将用户输入的密码加密,并将此盐与数据库中的盐(在注册期间创建)进行比较。如果相等,则用户登录。这对我来说似乎不起誓。所以,如果这不是oauth,这是什么标准?是否有任何其他标准用于"直接登录"这样吗?
假设我想允许用户注册并登录我的网站,但让他们通过第三方(如Facebook或Google)登录。这仅用于授权目的,并假设我的应用程序没有计划在他们的Facebook上发布或请求他们的Facebook数据,除了我可能想要使用他们的Facebook电子邮件作为我的webapp的用户ID。 oauth2是否提供此类授权?
抱歉天真的问题,因为我最近才读到oauth。
答案 0 :(得分:0)
对于没有第三方的注册/登录,正如凯文指出的那样,每个编程/网络框架通常都带有一个流行的库,该库一旦生成,就会生成所有的注册/登录页面,数据库表,流量等。然后,您唯一要做的就是调用该库提供的方法,该方法可以在需要确定用户身份的情况下,在您的后端代码中返回当前登录的用户。
使用咸密码方案与OAuth2完全无关。这是一种用于本地身份验证的广泛使用的方案,因为它具有许多优点,但是我仅在此处重点介绍2:
a。通过Internet从用户传输到服务器以进行身份验证的密码不是以明文形式而是以散列格式发送。因此,即使被窃听,密码也不会泄露。
b。由于每个密码都是固定的,因此即使两个相同的密码也不会具有相同的哈希值,因为每个密码都有不同的盐。因此,即使窃听了密码哈希,也无法在用户使用相同密码的另一服务处重复使用该密码,因为另一服务期望使用不同的盐生成密码哈希。
OAuth2与授权有关(向用户询问是否可以在另一个Web服务上代表她执行某些操作,例如,请求用户允许其访问在Facebook上注册的电子邮件地址)。将其用于身份验证可能是不安全的(对于OAuth2隐式流)。为什么? OAuth2的最终结果是与许可(例如,“访问电子邮件地址的许可”)相关的访问密钥。当您使用OAuth2结果(访问密钥)进行身份验证时,这意味着您假设“允许访问电子邮件地址”意味着该用户已成功通过Facebook进行身份验证,因此看起来不错。但是,假设另一个站点是否也像您一样使用OAuth2进行身份验证;如果它收到带有“允许访问电子邮件地址”的访问密钥,则将假定您已通过Facebook进行身份验证,因此它将授予您对属于该电子邮件地址的帐户的访问权限。您实际上可以使用从用户那里获得的访问密钥,然后在另一个站点中以她的身份登录,反之亦然。
要使用OAuth2进行身份验证,您需要将其与OpenID Connect(OIDC)一起使用,因为OAuth2-OIDC的最终结果包含一个id_token,带有aud(受众群体)字段,用于标识访问密钥用于谁({{3 }}),以防止在不需要的地方重复使用访问密钥。易于理解的图表的完整解释在这里:https://openid.net/specs/openid-connect-core-1_0.html#IDToken
使用OAuth2进行登录的另一种非常简单但可能不安全的方法是使用资源所有者密码凭据,其中您的网站充当用户与OAuth2提供程序(Facebook)之间的中间人。
如果您不必花时间深入了解OAuth2,那么对所有OAuth2流的并排比较可能会有所帮助。
https://www.slideshare.net/KhorSoonHin/the-many-flavors-of-oauth/36?src=clipshare
提供的