是否可以使用 OAuth2 授权码作为登录成功的证明?

Is it okay to use an OAuth2 authorization code as proof of a successful login?

我有一个包含电子邮件和密码的数据库,以及一个 Flutter 应用程序,可以让这些用户通过提供他们的电子邮件地址和密码(老式方式)登录到该应用程序。

现在,其中一些用户属于一个组织,该组织拥有一个单独的网站,他们在该网站上使用 Microsoft/Office 365 帐户登录。当然,他们希望能够使用他们的 Office 登录我的应用程序365 帐户,而不必记住并在应用程序中输入不同于他们通常在其组织网站上使用的密码。

所以我一直在查看他们的网站,该网站使用 Microsoft Azure 作为后端。从他们当前的登录页面,我可以找到 tenantIDclientIDredirectURLscope。由此我可以从 login.microsoftonline.com 授权端点取回授权码。但是,由于我的应用程序未在组织 Azure 帐户中注册,我没有 clientSecret,因此我无法调用令牌端点并获得 idToken.

我正在使用 WebView 来显示他们组织网站的登录信息,因此当他们被重定向时,我可以从重定向 URL 中获取授权码。

所以我的问题是,我是否可以直接使用授权码来验证用户是否已使用其 Office 365 帐户成功登录?我只需要知道用户在组织中有一个帐户,并且他们可以提供有效的电子邮件和密码进行登录。

如果他们被重定向到带有授权代码的重定向 URL,则意味着他们已成功登录。然后我可以根据提供给Office 365 授权终结点。因为如果他们无法登录到他们的 Office 365,他们就不会获得授权码,对吗?

不,授权代码仅对身份提供者有意义,在本例中为 Azure AD。它不会向您的应用程序证明任何事情。 你可以做的是在授权 URL 中尝试 response_type=code+id_token。 如果 ID 令牌已配置为可从授权端点返回(这在应用程序注册配置中完成),您将取回一个可以验证的签名 ID 令牌。