使用 ASP.NET MVC 和 ASP.NET Core 进行单点登录(.NET Core单点登录)

作者 : 慕源网 本文共3249个字,预计阅读时间需要9分钟 发布时间: 2022-12-16 共168人阅读

什么是单点登录 (SSO)?

用户必须对自己进行身份验证才能访问受 Web 应用程序保护的页面,如果用户访问多个 Web 应用程序,则必须对其进行身份验证。

使用 ASP.NET MVC 和 ASP.NET CORE 的单点登录

.NET Core单点登录,有兴趣为您的 ASP.NET MVC 应用程序使用单点登录 (SSO) 吗?你来对地方了。对同一组织拥有的自定义应用程序使用 SSO 的原因有很多。

  • 改善用户体验。
  • 减少开发时间。
  • 提高了安全性。

这些都是很好的理由。

我喜欢 SSO 的另一件事是它允许我以小增量而不是一次全部更新大型代码库。

假设您要使用 ASP.NET MVC 5 编写的应用程序迁移到 ASP.NET Core MVC。您可以一次迁移一项服务,而不是一次重写所有内容。通过在两个应用程序之间实施 SSO,您可以有效地将两个应用程序连接起来,就好像它们是一个应用程序一样。

本教程通过在 MVC 5 应用程序和 .NET Core 应用程序中实现他的 SSO 来模拟这样的场景。在此过程中,您还将了解这两个平台在如何实现身份验证方面的差异。

查找 ASP.NET MVC 5 应用程序

从 GitHub 访问现有的 MVC 5 应用程序,而不是从头开始构建项目。克隆或下载此项目 (https://github.com/oktadev/aspnet-mvc-crud-example) 并在 Visual Studio 中打开解决方案。

Web.config文件包含一些应用程序设置,供程序员使用 Okta 提供的 Open ID Connect 服务器配置身份验证:

<add key="okta:ClientId" value="{yourClientId}" />
<add key="okta:ClientSecret" value="{yourClientSecret}" />
<add key="okta:OktaDomain" value="https://{yourOktaDomain}" />

对于本教程,您需要将这些值切换到您自己的 Okta 实例。如果您已有帐户,请登录到您的 Okta 域;如果您还没有,请注册一个永久免费的开发者帐户。

登录 Okta 后,注册您的客户端应用程序。

  • 单击顶部菜单上的应用程序。
  • 单击添加应用程序。
  • 选择Web并单击下一步。
  • 输入SSO MVC 5作为名称
  • 对于 允许的授予类型 ,请选中 隐式(混合) 复选框
  • 最后点击完成

应用程序已经创建,但我们还需要添加一些东西。选择编辑并将 http://localhost:8080/Account/PostLogout 添加到注销重定向 URI列表,然后单击保存。

在下一个屏幕上,您将看到设置的摘要。在“常规设置”部分下,您将看到“客户端凭据”部分。使用您的客户端 ID客户端密码更新Web.config中的 SSO 设置。接下来,转到 Okta 仪表板的主页,复制左上角显示的组织 URL,并将其粘贴到 Okta 中。

Web.config中的 OktaDomain 应用程序设置。

此时,您应该能够运行您的应用程序并使用 OpenID Connect 登录和注销。如果您有兴趣,请查看Startup.cs以了解身份验证中间件的配置方式。

查找 ASP.NET Core 应用程序

现在您正在使用 Okta 登录您的 MVC 5 应用程序,将 SSO 添加到您的第二个应用程序是微不足道的。

首先,从 GitHub 下载或克隆此 .NET Core 应用。(https://github.com/oktadeveloper/okta-aspnetcore22-crud-example) 如果在 Visual Studio 中打开,请将调试目标从 IIS Express 更改为 LiveMusicFinder。

这将通过端口 5001(对于 https)上的 Kestrel Web 服务器运行您的应用程序。

返回您的 Okta 管理面板并注册此应用程序。

  • 单击 菜单顶部的应用程序 
  • 然后点击 添加应用
  • 然后选择 Web 并单击 Next
  • 输入 名称SSO Core MVC _ 
  • 将 基本 URI 替换为 https://localhost:5001/
  • 将 登录重定向 URI 替换为 https://localhost:5001/authorization-code/callback
  • 点击 完成

完成后,您将被带到应用程序的“常规设置”选项卡。在此选项卡中,单击编辑按钮并将条目添加到注销重定向 URI,如https://localhost:5001/signout/callback。

然后单击保存。

从下一页的客户端凭证部分复制客户端 ID客户端密码,并更新应用程序的appsettings.json文件。

"Okta": {
  "ClientId": "{yourClientId}",
  "ClientSecret": "{yourClientSecret}",
  "OktaDomain": "https://{yourOktaDomain}",
  "PostLogoutRedirectUri": "https://localhost:5001/"
},

在编辑设置时,更新OktaDomain设置以匹配您在 MVC 5 应用程序的Web.config中输入的内容。同时将PostLogoutRedirectUri更改为https//local host:5001/。

就是这样。当您登录任一应用程序时,单击另一个应用程序中的登录链接即可自动登录,而不会提示您输入密码。

(如果您莫名其妙地使用 Internet Explorer 和 Visual Studio 的自动启动功能进行测试,请确保您在第一个浏览器窗口的选项卡中打开她的第二个应用程序。。每个浏览器窗口都与其他窗口隔离,因为Visual Studio 启动 IE 的习惯。)

单点登录在 ASP.NET MVC 5 和 ASP.NET Core 中的工作原理

我们已经看到在两个 ASP.NET 应用程序中启用 SSO 是多么容易,但幕后真正发生了什么才能让它发挥作用?

假设您首先导航到App 1并单击“登录”。应用程序 1 重定向到它登录的Okta IdP(身份提供者)。当您登录时,您的浏览器中会设置来自 Okta 域的 cookie。此 cookie 让您登录到 Okta。然后,Okta 返回到 App 1,并带有用于完成登录过程的令牌。此时,她的 cookie 也设置在 App 1 域上。这是解释状态的图表:

然后在同一浏览器的另一个选项卡中打开应用程序 2 。单击登录,您将被重定向回Okta IdP。然而,这次我们仍然有一个有效的 cookie,所以我们已经登录到 IdP。因此,Okta 没有显示登录屏幕,而是使用完成本地登录过程所需的令牌简单地重定向到 App 2。cookie 设置在应用程序 2 的域上,您可以从任何地方登录。

请注意,在撰写本文时,Okta 不支持单点注销。当您退出应用程序 1 时,应用程序 1 中的 cookie 将被删除,并快速调用 Okta IdP,它会删除 cookie。但是,App 2 cookie 仍然存在并且您仍然登录到 App 2,直到您单击“注销”或 cookie 过期。默认有效期为 30 天。

解释 ASP.NET OpenID 连接流程

您可能已经注意到,当我为我的 MVC 5 应用程序设置配置时,我必须选中该框以启用隐式(混合)授权类型,但 .NET Core 应用程序则不然。

5 年前(在软件世界很久以前)为他的 MVC 编写 OpenID Connect 中间件时,实现了 OpenID Connect 混合流程。此流程要求 IdP 将授权代码和 ID 令牌传递给 MVC 5 应用程序提交。将用户重定向到您的应用程序时。

在为 .NET Core 编写 OpenID Connect 中间件时,它实现了更安全的授权代码流。在这种情况下,IdP 应该只返回授权代码,中间件应该通过向其 IdP 的反向通道请求获取 ID 令牌。这意味着 ID 令牌不会暴露给浏览器。请注意,如果您在 ID 令牌中传递敏感信息,在 MVC 5 中,此令牌将通过浏览器返回到您的应用程序。为他启用 SSO 以使用 .NET Core 应用程序时,这不是问题。


慕源网 » 使用 ASP.NET MVC 和 ASP.NET Core 进行单点登录(.NET Core单点登录)

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录