主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

基于策略的访问

注意

独立 MATLAB® Web App Server™ 产品支持基于策略的访问,而 MATLAB Compiler™ 中包含的开发版本则不支持。有关详细信息,请参阅MATLAB Web App Server 差异

前提条件

  • 在服务器上启用 SSL。有关详细信息,请参阅启用 SSL

  • 在服务器上启用身份验证。有关详细信息,请参阅身份验证

创建 webapps_acc_ctl.json 文件

通过在服务器上启用基于策略的访问,您可以创建基于属性的规则,允许经过身份验证的主体访问服务器上的 Web App。

要启用基于策略的访问:

  1. 检查 SSL 是否启用。有关详细信息,请参阅启用 SSL

  2. 检查是否启用了身份验证,并验证在 webapps_authn.json 文件中指定了 userAttributeName 和/或 groupAttributeName 值。有关详细信息,请参阅身份验证

  3. 检查服务器上的 apps 根文件夹中是否存在文件夹。虽然文件夹对于启用基于策略的访问不是必需的,但使用文件夹可以让您组织 Web App 并将其指定为可访问的资源。有关详细信息,请参阅创建文件夹来组织 Web App

  4. 创建一个名为 webapps_acc_ctl.json 的文件并将其放在 webapps_private 文件夹中。

    webapps_private 文件夹位于以下位置:

    操作系统文件夹位置

    Windows®

    %ProgramData%\MathWorks\webapps\R2024b\config\webapps_private

    Linux®

    /local/MathWorks/webapps/R2024b/config/webapps_private

    macOS

    /Library/Application Support/MathWorks/webapps/R2024b/config/webapps_private

webapps_acc_ctl.json 的 JSON 架构是:

{
  "version": "<major>.<minor>.<patch>",
  "policy": [
    {
      "id": "<policy_id>",
      "description": "<policy_description>",
      "rule": [
        {
          "id": "<rule_id>",
          "description": "<rule_description>",
          "subject": { "<attribute_name_of_auth_subject>": [ "<attribute_value_of_auth_subject>" ] },
          "resource": { "<app OR folder>": [ "<app_name OR folder_name>" ] },
          "action": [ "<action_type>" ]
        },
        {
          "id": "<rule_id>",
          "description": "<rule_description>",
          "subject": { "<attribute_name_of_auth_subject>": [ "<attribute_value_of_auth_subject>" ] },
          "resource": { "<app OR folder>": [ "<app_name OR folder_name>" ] },
          "action": [ "<action_type>" ]
        }
      ]
    }
  ]
}
  • version:指定 JSON 架构的版本。R2024b 的默认值是 1.0.0

  • policy:策略模块包含基于策略的访问所需的策略列表。一个策略文件中只能指定一个策略。

  • id:为该策略指定策略 ID。策略 ID 必须是一组字母数字字符。任何前导或尾随空格均会被删除。例如:

    "id" : "policy420"
  • description:指定策略的描述。例如:

    "description" : "Company policy for accessing web apps."
  • rule:规则模块包含规则对象列表。一个规则模块中可以存在多条规则。每条规则都需要一个 ID,并且每条规则的 <rule_id> 必须是唯一的。

  • id:为每个规则指定唯一的规则 ID。规则 ID 必须是一组字母数字字符。任何前导或尾随空格均会被删除。例如:

    "id" : "rule101"
  • description:为每个规则指定一个描述。例如:

    "description" : "Only the Hercules group can run the BloodPressure app."
  • subject:指定可以访问资源的经过身份验证的主体的属性名称 - 值对。

    例如:

    "subject": { "memberOf": ["CN=Middle,OU=middle,ou=groups,DC=school,DC=com"] }
    "subject": { "groups": ["Sales"] }
    "subject": { "uid": ["fbueller", "cfrye"]  }

    如果您正在使用 Azure® 活动目录并且需要检索组 ID,请参阅 使用 Azure Active Directory

  • resource:指定可访问的资源类型和名称。仅支持 appfolder 类型的资源。如果您未指定资源,那么即使服务器上存在该 App 或文件夹,经过身份验证的主体也将无法访问它。有关如何创建文件夹的信息,请参阅创建文件夹来组织 Web App

    例如,指定对根级别的 App 的访问权限:

    "resource": { "app": ["BloodPressure"] }

    例如,指定对特定文件夹中 App 的访问权限:

    "resource": { "app": ["MagicFolder/CardTricks"] }

    例如,指定对特定文件夹中所有 App 的访问:

    "resource": { "folder": ["MagicFolder"] }

    例如,指定对根文件夹中所有 App 的访问:

    "resource": { "folder": ["/"] }
  • action:指定经过身份验证的主体可以执行的操作类型。如果资源类型是 app,则支持的操作是 execute,这使得主体可以运行 Web App。如果资源类型是 folder,则支持的操作是 executemodify。在本例中,execute 操作允许主体运行指定文件夹中的所有 Web App。如果主体在 webapps_app_roles.json 基于角色的访问文件中被分配了作者的角色,则 modify 操作允许主体将 Web App 上传到文件夹或从文件夹删除 Web App。在 webapps_app_roles.json 基于角色的访问文件中被分配了用户角色的主体即使被分配了 modify 操作,也无法将 Web App 上传到文件夹或从文件夹删除 Web App。例如:

    "action": ["execute", "modify"]

    有关详细信息,请参阅基于角色的访问

LDAP 身份验证的示例 webapps_acc_ctl.json 文件

{
  "version": "1.0.0",
  "policy" : [
    {
      "id": "policy1001",
      "description": "Web Apps Access Control Policy",
      "rule": [
        {
          "id": "rule101",
          "description": "Sales group can run the BloodPressure app.",
          "subject": { "memberOf": ["cn=Sales,ou=sales,ou=groups,dc=example,dc=com"] },
          "resource": { "app": ["BloodPressure"] },
          "action": ["execute"]
        },
        {
          "id": "rule102",
          "description": "Specified subjects can run the CardTricks app in the MagicDir folder.",
          "subject": { "uid": ["erooney"]  },
          "resource": { "app": ["MagicDir/CardTricks"] },
          "action": ["execute"]
        },
        {
          "id": "rule103",
          "description": "Specified subjects can run all apps in the MagicDir folder and modify (upload or delete) apps in MagicDir folder.",
          "subject": { "uid": ["fbueller"]  },
          "resource": { "folder": ["MagicDir"] },
          "action": ["execute", "modify"]
        },
        {
          "id": "rule104",
          "description": "Specified subjects can run all apps under the DayOff folder.",
          "subject": { "uid": ["cfrye", "psloane"]  },
          "resource": { "folder": ["DayOff"] },
          "action": ["execute"]
        },
        {
          "id": "rule105",
          "description": "Specified subjects can run all apps in the apps root folder and modify (upload or delete) apps in the apps root folder.",
          "subject": { "uid": ["jbueller"]  },
          "resource": { "folder": ["/"] },
          "action": ["execute", "modify"]
        }
      ]
    }
  ]
}

小心

请严格执行 webapps_acc_ctl.json 的 JSON 架构语法。架构语法中的错误可能导致服务器无法启动,或者在尝试登录时拒绝您访问服务器。

将基于策略的访问与身份验证和基于角色的访问结合使用

基于策略的身份验证访问

  • 如果使用基于策略的访问,则必须在 webapps_authn.json 身份验证文件的 appConfig 模块中包含以下属性并设置适当的值:

    • userAttributeName

    • groupAttributeName

    如果未能包含并设置这些属性的值,则会导致服务器无法启动。有关详细信息,请参阅身份验证

  • 如果您使用基于策略的访问,并在 webapps_authn.json 身份验证文件中设置 userAttributeNamegroupAttributeName 的值,则 webapps_acc_ctl.json 基于策略的访问文件中 subject 属性指定的属性必须与您在身份验证文件中设置的值匹配。

    身份验证文件(webapps_authn.json)基于策略的访问文件 (webapps_acc_ctl.json)

    "userAttributeName": "<value>",
    "groupAttributeName": "<value>"
    

    "subject": { "<attrib>": ["..."] }
    "subject": { "<attrib>": ["..."]  }
    

    例如,如果您在 webapps_authn.json 身份验证文件中设置以下值:

    "userAttributeName": "uid",
    "groupAttributeName": "memberOf"

    然后,webapps_acc_ctl.json 基于策略的访问文件必须使用相同的值:

    "subject": { "uid": ["..."] }
    "subject": { "memberOf": ["..."]  }

    JSON 文件中的属性不匹配导致服务器无法启动。有关详细信息,请参阅基于策略的访问

注意

您可以使用基于策略的访问,并进行独立于基于角色的访问的身份验证。然而,这种访问类型导致经过身份验证的主体只能执行 Web App 而不能修改它们。

基于策略和角色的身份验证访问

  • 如果您同时使用基于策略的访问和基于角色的访问,并在 webapps_authn.json 身份验证文件中设置 userAttributeName 和/或 groupAttributeName 的值,则 webapps_acc_ctl.json 基于策略的访问文件中的 subject 属性指定的属性以及 groupsusers 属性指定的属性必须与您在身份验证文件中设置的值匹配。

    身份验证文件 (webapps_authn.json) 基于策略的访问文件 (webapps_acc_ctl.json)基于角色的访问文件 (webapps_app_roles.json)

    "userAttributeName": "<value>",
    "groupAttributeName": "<value>"
    

    "subject": { "<attrib>": ["..."] }
    "subject": { "<attrib>": ["..."]  }
    

    "users": { "<attrib>": ["..."]  }
    "groups": { "<attrib>": ["..."] }
    
    

    例如,如果您在 webapps_authn.json 身份验证文件中设置以下值:

    "userAttributeName": "uid",
    "groupAttributeName": "memberOf"

    然后,webapps_app_roles.json 基于角色的访问文件必须使用相同的属性:

    "appRoles": [
    		{
    		  "id": "User",
    		  "description": "User role info",
    		  "groups": { "memberOf": ["..."] },
    		  "users": { "uid": ["..."] }
    		},
    		{
    		  "id": "Author",
    		  "description": "Author role info",
    		  "groups": { "memberOf": ["..."] },
    		  "users": { "uid": ["..."] }
    		}
    	   ]

    并且,webapps_acc_ctl.json 基于策略的访问文件必须使用相同的值:

    "subject": { "memberOf": ["..."]  }
    "subject": { "uid": ["..."] }

    值不匹配会导致服务器无法启动。有关详细信息,请参阅基于角色的访问

注意

当您使用基于策略的访问和基于角色的访问进行身份验证时,必须在 webapps_app_roles.json 基于角色的访问文件中为经过身份验证的主体分配作者角色,并在 webapps_acc_ctl.json 基于策略的访问文件中将 modify 作为操作,以便主体能够修改 Web App。

另请参阅

主题