CAS 多因素身份验证提供程序选择

CAS Multifactor Authentication Provider Selection

我正在使用版本 6.1.4 中的 cas-overlay-template 项目。我在我的 CAS 上实现了两个 mfa 提供程序,Google AuthenticatorCAS Simple。两者都有效,我分别测试了它们,得到了预期的结果。

直到现在,我一直在激活 mfa 修改 cas.properties 文件添加此属性:cas.authn.mfa.globalProviderId=mfa-gauth 当我想使用 Google,或 cas.authn.mfa.globalProviderId=mfa-simple 当我使用 CAS 本身。

好吧,在 CAS 文档中提到可以启用提供程序 selection 菜单,如果只需添加此属性即可解决多个问题:cas.authn.mfa.provider-selection-enabled=true。所以,我的配置如下:

cas.authn.mfa.provider-selection-enabled=true
cas.authn.mfa.globalProviderId=mfa-gauth
cas.authn.mfa.globalProviderId=mfa-simple

但是当我尝试使用任何用户登录时(我使用的是默认用户 casuser:Mellon),CAS 没有向我显示我可以 select 以下 mfa 提供商的菜单, 直接转到mfa-simple provider.

我做错了什么?

Well, in CAS documentation is mentioned that is possible to enable a provider selection menu, if resolved more than one just by adding this properties:

到目前为止一切顺利。

So, my configuration is the following:

这就是问题所在。您 resolving/triggering 不只是一个提供者。您从 mfa-gauth 开始,然后用 mfa-simple 覆盖它。在 CAS 6.1.x 中,globalProviderId 只接受一个标识符。它不是接受多个值的列表或任何类型的容器。这已在下一个版本中解决。

目前,要解析多个提供者,您需要将 MFA 提供者分配给注册的服务定义。像这样:

{
  "@class": "org.apereo.cas.services.RegexRegisteredService",
  "serviceId": "^(https|imaps)://.*",
  "name": "Example",
  "id": 1,
  "description": "This service definition defines a service.",
  "evaluationOrder": 1,
  "multifactorPolicy" : {
    "@class" : "org.apereo.cas.services.DefaultRegisteredServiceMultifactorPolicy",
    "multifactorAuthenticationProviders" : [ "java.util.LinkedHashSet", [ "mfa-duo", "mfa-gauth" ] ]
  }
}

这意味着可以在每个应用程序的基础上启用提供商选择。或者,您可以编写一个 groovy 小脚本将 return 多个提供程序返回 CAS,从而允许选择菜单显示菜单项。

阅读 this post 了解完整详情。