0

我有一个 MVC 应用程序(.Net Framework 4.5),它在过去三年中一直存在并使用表单身份验证机制。此应用程序提供不同的帐户,如个人、免费赠品、企业等。对于企业帐户,我们在同一个应用程序中处理所有内容。即假设一个名为“xyz”的企业使用该应用程序创建了一个企业帐户,那么我们提供了一个自定义 URL,例如“<a href="https://application/xyz/login" rel="nofollow noreferrer">https:/ /application/xyz/login”,并从我们识别该企业的 URL 开始。我不知道他们这样实现的确切原因,因为我已经看到具有企业帐户的应用程序被创建为子域(例如https://xyz.okta.com)。现在客户要求将 Okta 集成到此应用程序中。因此,我查看了 Okta,发现 SAML 是正确的做法,并最终出现在 KentorIT Authservices 中。最初,我能够将其与示例 MVC 应用程序集成,并且身份验证部分工作正常。有了一些关于 SSO 的基本概念,我开始将 kentor authsevices 集成到我的应用程序中。我在此实施中发现的挑战是:

1) 对于企业帐户,每个企业的 Okta 配置设置都不同,并且在我当前的应用程序实现中,无法从 web.config 中进行设置。因此,我尝试从代码中进行设置,并且能够通过替换来集成这些设置Configuration.Options.FromConfiguration;.我打算在数据库中存储所有与配置相关的东西(单点登录 URL、受众 URI、身份提供者颁发者“等),以便我可以随时获取信息,并且我假设“身份提供者颁发者”每个 Okta 帐户的 ID 都是唯一的。在 IdP 启动的流程中,当用户尝试访问应用程序时,它将重定向到 AuthServices\Acs 操作方法,然后我正在尝试读取配置设置。来自请求有什么方法可以识别来自哪个 Okta 帐户调用(如身份提供者颁发者)?目前,我设置了“身份提供者颁发者””值(我认为这对于 okta 帐户应该是唯一的)到 General SAML 设置选项卡下的 Default RelayState 字段,我能够从 AuthServices\Acs 操作方法中检索它。这似乎是个好主意吗?请建议。

2) Enterprise 帐户受许可证数量的限制(例如 50 个)。假设 Enterprise Okta 管理员有意添加了 55 个用户,所有这些用户都可以根据默认设置成功验证应用程序。有什么办法可以处理这种情况。我是否需要记录特定企业帐户下的用户列表?

3)从文件中我了解到,Kentor 身份验证服务仅用于身份验证,授权部分必须从应用程序本身完成。当前的应用程序实现由一个自定义授权属性组成,该属性检查存储在数据库中的用户权限。那应该是原样,我们必须根据数据库权限进行授权。对?

期待您的宝贵建议,如有错误请指正。提前致谢。

4

1 回答 1

4
  1. 不要将 RelayState 用于敏感数据,除非您对其进行加密签名。使用 POST 绑定时,它不受任何签名保护,因此用户可以对其进行操作。要获取颁发的 idp,请检查 AuthServices 生成的任何声明的颁发者字段。

  2. 是的。

  3. 是的,这就是 Kentor.AuthServies 的全部想法:将 SAML2 身份验证插入 .NET 的安全模型,以允许您使用任何当前/传统的授权设置。

于 2017-05-22T13:12:02.387 回答