IdP 发起的流程 - 识别 okta 帐户

IdP initiated flow - Identify okta account

我有一个 MVC 应用程序 (.Net Framework 4.5),它已经存在了三年并使用了表单身份验证机制。此应用程序提供不同的帐户,如个人、免费赠品、企业等。对于企业帐户,我们在同一个应用程序中处理所有事情。 IE。假设一家名为“xyz”的企业使用该应用程序创建了一个企业帐户,那么我们将提供一个自定义 URL,如“https://application/xyz/login” and from the URL we are identifying that enterprise. I don’t know the exact reason why they implemented like this as I have seen applications that are having enterprise accounts are created as subdomains (e.g. https://xyz.okta.com)。现在客户要求将 Okta 集成到这个应用程序中。 所以我调查了 Okta,发现 SAML 是正确的做法,并最终出现在 KentorIT Authservices 中。最初,我能够将它与示例 MVC 应用程序集成,并且身份验证部分工作正常。有了关于 SSO 的一些基本概念,我开始将 kentor authsevices 集成到我的应用程序中。我在这个实现中发现的挑战是:

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

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

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

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

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

  2. 是。

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