使用 IdentityServer4 登录应用程序

Login App with IdentityServer4

我必须开发一个 SSO 系统,并且必须使用 IdentityServer4 来完成。我已经阅读了文档和示例,但我有一些疑问。老实说,我不太明白,但我真的是 Oauth2 和 OpenId Connect 的新手。

我们将有一堆客户端(Web 应用程序),每个客户端都有自己的 Web APi。我们必须为所有这些设置一个集中的登录应用程序。我认为 javascript 客户端的示例接近于我们想要实现的目标。此外,用户可能有权访问一个客户端(应用程序),但不能访问另一个客户端(应用程序),因此 IdentityServer 必须提供有关特定用户可以访问的客户端(应用程序)的信息。

所以,这些是我不明白的事情:

1.- 在我可以阅读的文档中,有两个令牌,一个身份令牌和一个访问令牌。但在示例中,我看到的只是访问令牌。在我看来,访问令牌是具有所需所有信息的令牌。我错了吗?

2.- 另外,我已经阅读了有关 de Grant Types 的内容,但我不太确定我们必须使用哪种类型。起初我想使用 ResourceOwner 密码,因为它需要客户端、密码、用户和密码,我认为它可能是最终用户。我发现这个示例 http://sunilrav.com/post/How-to-Customize-Authentication-in-Identity-Server-4 可以自定义验证用户和密码的 class。我认为这可能是要走的路,但文档指出了关于这种授权类型的“...这就是所谓的“非交互式”身份验证,通常不推荐使用。”。 javascript 客户端示例使用隐式 Grat 类型,文档说明 用于基于浏览器的应用程序(我们的客户端应用程序将全部使用 React 基于浏览器)。

3.- 我的登录应用程序可以是 Javascript(反应)应用程序吗?示例快速入门在 MVC.NET 中制作。这个登录应用程序直接连接到 de IS4 服务器而不要求访问令牌? (在示例中,应用程序嵌入在 IS4 中)。

4.- 我可以使用 IS4 保护在 .net 框架 (4.6.2) 而不是 .Net Core 中开发的 WEB API 吗?我还没有找到任何例子。

我遵循的文档是官方的。示例(快速入门)也在那里。 (我不能 post 超过两个链接)。

非常感谢您的阅读和帮助。

身份令牌和访问令牌 身份令牌是包含用户身份的令牌,它将告诉客户端应用程序它是什么用户。成功登录后,用户将被重定向到带有这些令牌的客户端应用程序。响应也将有声明,例如权限范围、名称、电子邮件您也可以添加自定义声明。

访问令牌用于访问受保护的网络 api 资源。您必须在每个请求中发送访问令牌才能访问 api.

资助类型 授权类型基本上是您希望客户端应用程序与身份验证服务器交互的方式。 https://identityserver4.readthedocs.io/en/release/topics/grant_types.html

我的登录应用程序可以是 Javascript(反应)应用程序吗?您的客户端应用程序可以是 javascript 应用程序,但您的身份验证服务器是将具有 login/signup 页面(和其他登录爵士乐)和帐户控制器的身份服务器应该是您的 MVC 应用程序。因为,一切都已经使用 MVC 和 Entity framework 完成,为什么你要重新做一切。

我可以用 IS4 保护 WEB API 我不确定这个,但我不明白为什么你不能这样做。

This 是基本 IdSrv 流程的一个很好的答案!

UPDATE 据我了解,Grant Type 使用它的答案取决于您的客户端应用程序要求。如果您想使用 Javascript 客户端,您可以使用隐式流,但您将无法使用刷新令牌,并且您的访问令牌不是 100% 受浏览器保护的,因为客户端可以访问它。

如果你想打开你的网站 api 到 public 那么你可以使用客户端凭据流。如果你想更安全,你应该使用混合流或 HybridClient 凭证流。 (再次取决于要求)。这样您就可以使用刷新令牌,这样您的访问令牌就会更加安全。