我知道OAuth2和OpenID Connect的工作方式。但是仍然有些困惑困扰着我。
我们开发了自己的Auth Server,服务API和移动应用。因此,客户端应用程序是受信任的,并且我们使用“密码”授予类型。应用程序用户存储库遵循身份验证服务器中的相同用户数据库。
我们的客户通过用户名/密码登录到该应用程序。然后,该应用将用户凭据提交到Auth Server令牌端点,该端点将(承载)访问令牌和ID令牌(JWT)返回给客户端。 ID令牌包含基本的用户信息,以便该应用程序可以像“ Welcome Tony Stark!”那样欢迎用户。 该访问令牌可用于访问API(例如更新用户个人资料)。
根据设计,OAuth不是用于身份验证的工具。参考:https://www.scottbrady91.com/OAuth/OAuth-is-Not-Authentication
我的问题是
1)如果仅客户端仅对获取用户信息感兴趣,我们是否需要验证ID令牌的签名?另外请注意,ID令牌是通过https连接来自令牌端点的。
2)让我们忘记ID令牌。如果客户端从Auth Server获得访问令牌,我们是否可以认为用户已通过身份验证检查(即登录成功)?此流程非常类似于没有OAuth的简单密码登录。
3)客户端可以使用访问令牌访问受保护的API。没有访问令牌,客户端只能调用某些公共API。它是否等效于登录和不登录可以做什么?似乎访问令牌可以视为“登录会话Cookie”。
4)我的案子没有第三方参与。一切(客户端,身份验证服务器,服务API)均由同一组织开发和拥有。使用OAuth仍然有意义吗?
答案 0 :(得分:1)
通常,移动应用被视为公共客户端。除非您限制谁可以访问该移动应用程序,否则不能认为它是可信任的,因为即使您开发了该应用程序,也可能有人在您的控制范围之外破坏该应用程序。
此外,资源凭证授予类型通常不是一个好主意。 一件事是,OpenID Connect规范需要授权码,ID令牌或混合流:
身份验证可以遵循以下三种路径之一:授权代码 流(response_type = code),隐式流(response_type = id_token 令牌或response_type = id_token)或混合流(使用其他 OAuth 2.0多种响应类型中定义的响应类型值 编码惯例[OAuth.Responses])。
使用隐式流时,必须按照与第3.1.3.7节中定义的授权码流相同的方式来验证ID令牌的内容,但本节中指定的区别除外。
但是,如果使用TLS,则可能符合3.1.3.7中的例外规定:
如果通过客户端和令牌端点之间的直接通信(在此流程中)接收到ID令牌,则可以使用TLS服务器验证代替签发令牌签名来验证发行者。客户端必须使用JWT alg标头参数中指定的算法,根据JWS [JWS]验证所有其他ID令牌的签名。客户必须使用发行人提供的密钥。
如果您能够信任客户端,并且已经实现了用户/通过检查,那么您应该能够信任已根据OAuth 2.0将访问令牌授予了经过身份验证的身份规范。
OAuth 2.0中的访问令牌也包含范围,并且应限制可以使用该访问令牌进行的操作。没有OAuth的登录不一定。
使用OAuth保护资源所有者的凭据是一个好主意。如果您使用资源所有者凭证授予类型,那么这仍然会带来一些好处,因为用户只有在客户端没有有效的访问令牌时才可以输入密码,即用户可以为访问令牌输入一次密码。并使用该密码来验证用户,而不是再次输入密码或将密码存储在某个地方。
即使此授予类型要求客户直接访问 资源所有者凭证,使用资源所有者凭证 单个请求,并交换访问令牌。这个 授予类型可以消除客户端存储 通过交换资源所有者凭证以供将来使用 具有长期访问令牌或刷新令牌的凭据。
答案 1 :(得分:1)
1)如果客户端,我们是否需要验证ID令牌的签名 只对获取用户信息感兴趣吗?另请注意 ID令牌是通过https连接来自令牌端点的。
是。
2)让我们忘记ID令牌。我们可以请问用户已通过 如果客户端获得一个身份验证检查(即登录成功) 从Auth服务器访问令牌?这个流程非常类似于简单 没有OAuth的密码登录。
如果我了解前提。是的。不需要使用ID令牌。
3)客户端可以使用访问令牌访问受保护的API。不带 访问令牌,客户端只能调用一些公共API。是吗 等效于有和没有登录该怎么办?看来 访问令牌可以视为“登录会话Cookie”。
访问令牌是OAuth客户端使用的访问权限(如密钥),是从资源所有者委派的权限。
4)我的案子没有第三方参与。一切(客户, 身份验证服务器,服务API)由同一服务器开发并拥有 组织。使用OAuth仍然有意义吗?
是的。 OAuth和OpenID Connect已被许多组织使用,并且是一种测试解决方案。
您不应尝试重新发明“滚轮”。使用已知的可信库进行身份验证,授权和加密操作。 OpenID Connect has some certified Implementations