Authentication 我可以使用OAuth对受信任的客户端(移动应用)进行身份验证吗?

Authentication 我可以使用OAuth对受信任的客户端(移动应用)进行身份验证吗?,authentication,oauth,oauth-2.0,openid-connect,Authentication,Oauth,Oauth 2.0,Openid Connect,我知道OAuth2和OpenID Connect是如何工作的。但仍有一些困惑困扰着我 我们开发了自己的认证服务器、服务API和移动应用程序。因此,客户端应用程序是可信的,我们使用“密码”授权类型。应用程序用户存储库遵循auth server中的相同用户数据库 我们的客户通过用户名/密码登录应用程序。然后,应用程序将用户凭据提交给Auth Server令牌端点,该端点将向客户端返回(承载)访问令牌和ID令牌(JWT)。 ID令牌包含基本的用户信息,因此应用程序可以像“欢迎托尼·斯塔克!”一样欢迎用

我知道OAuth2和OpenID Connect是如何工作的。但仍有一些困惑困扰着我

我们开发了自己的认证服务器、服务API和移动应用程序。因此,客户端应用程序是可信的,我们使用“密码”授权类型。应用程序用户存储库遵循auth server中的相同用户数据库

我们的客户通过用户名/密码登录应用程序。然后,应用程序将用户凭据提交给Auth Server令牌端点,该端点将向客户端返回(承载)访问令牌和ID令牌(JWT)。 ID令牌包含基本的用户信息,因此应用程序可以像“欢迎托尼·斯塔克!”一样欢迎用户。 访问令牌可用于访问API(例如更新用户配置文件)

OAuth在设计上不是用于身份验证的工具。参考:

我的问题是

1) 如果客户端只对获取用户信息感兴趣,我们是否需要验证ID令牌的签名?还要注意,ID令牌通过https连接来自令牌端点

2) 让我们忘记ID令牌吧。如果客户端从身份验证服务器获得访问令牌,我们是否可以认为用户已通过身份验证检查(即登录成功)?这个流程非常类似于没有OAuth的简单密码登录

3) 客户端可以使用访问令牌访问受保护的API。如果没有访问令牌,客户端只能调用一些公共API。它是否等同于登录和不登录都可以做什么?似乎可以将访问令牌视为“登录会话cookie”


4) 我的案件中没有第三方参与。所有内容(客户端、身份验证服务器、服务API)均由同一组织开发和拥有。使用OAuth还有意义吗?

通常,移动应用程序被视为公共客户端。除非你限制谁可以访问移动应用程序,否则它不能被认为是可信的,因为即使是你开发的应用程序,有人可能会在你的控制之外干扰它

此外,资源凭据授予类型通常不是一个好主意。 一件事是OpenID Connect规范需要授权代码、id令牌或混合流:

身份验证可以遵循以下三种路径之一:授权代码 流(response\u type=code)、隐式流(response\u type=id\u令牌 令牌或响应类型=id\u令牌),或混合流(使用其他 OAuth 2.0多响应类型中定义的响应类型值 编码实践[OAuth.Responses])

其他一些原因:

  • OpenID Connect RFC表示您必须验证ID令牌:
  • 当使用隐式流时,必须以与第3.1.3.7节中定义的授权代码流相同的方式验证ID令牌的内容,但本节中规定的差异除外

    尽管如此,如果使用TLS,您可以从3.1.3.7中获得此例外:

    如果通过客户端和令牌端点(在该流中)之间的直接通信来接收ID令牌,则可以使用TLS服务器验证来验证颁发者,而不是检查令牌签名。客户机必须根据JWS[JWS],使用JWT alg Header参数中指定的算法验证所有其他ID令牌的签名。客户必须使用发卡机构提供的密钥

  • 如果您能够信任客户机和已实现的用户/通过检查,那么您应该能够信任已根据OAuth 2.0规范将访问令牌授予经过身份验证的身份

  • OAuth 2.0中的访问令牌还包含作用域,应该限制使用该访问令牌可以做什么。没有OAuth的登录不一定是

  • 使用OAuth保护资源所有者的凭据是一个好主意。如果要使用资源所有者凭据授予类型,这仍然提供了一些好处,因为只有当客户端没有有效的访问令牌时,用户才能输入密码,即,用户可以为访问令牌输入一次密码,并使用该密码验证用户,而不是再次输入密码或将其存储在某处

  • 即使此授权类型要求客户端直接访问 资源所有者凭据,则使用资源所有者凭据 用于单个请求,并交换为访问令牌。这 授予类型可以消除客户端存储 通过交换 具有长期访问令牌或刷新令牌的凭据

    1) 如果客户端 只对获取用户信息感兴趣?还要注意 ID令牌通过https连接来自令牌端点

    2) 让我们忘记ID令牌吧。我们能不能对待已经通过的用户 验证检查(即登录成功),如果客户端获得 从身份验证服务器访问令牌?这个流程非常类似于simple 没有OAuth的密码登录

    如果我理解这个前提。是..不需要使用ID令牌

    3) 客户端可以使用访问令牌访问受保护的API。没有 访问令牌,客户端只能调用一些公共API。它是 相当于登录和不登录都可以做什么?看来 访问令牌可以被视为“登录会话cookie”

    访问令牌是OAuth客户端要使用的访问(类似于密钥),该访问由资源所有者授予权限

    4) 我的案件中没有第三方参与。一切(客户、, 认证服务器(服务API)由同一方开发和拥有 组织。使用OAuth还有意义吗

    对。OAuth和OpenID Connect被许多组织使用,是一种测试解决方案

    你不应该试图重新发明“轮子”。使用已知的受信任库进行身份验证、授权