管理身份

如何设置身份以登录并使用 Python SDK。

阅读时间6分钟
上次更新4 个月前

Unity 云服务要求调用者在您执行任何操作或访问其他模块(如 Assets)之前获得适当的授权。

有两个模块可用于检索此类授权

  • unity_cloud.identity.user_login
  • unity_cloud.identity.service_account

一次只能使用一个模块。声明 unity_cloud.identity.user_login.use() 会阻止对 unity_cloud.identity.service_account 模块的任何调用,并抛出异常。

我该如何...?

使用用户登录进行身份验证

用户登录过程需要

  1. 手动从集成请求登录(或注销)。
  2. 输入您的 Unity 帐户凭据进行身份验证。

用户登录实现 OAuth 2.0 PKCE 标准流程来检索访问令牌,并依赖默认操作系统浏览器作为中间介质进行身份验证。

通过仪表盘初始化并登录

要使用标准用户登录,请执行以下步骤

  1. 调用 unity_cloud.identity.user_login.use() 来初始化 user_login 模块。此操作会自动检查当前是否缓存了任何刷新令牌。如果是,则您已通过身份验证。
  2. 如果没有令牌,请调用 login 以触发浏览器打开并通过仪表盘登录。

登录成功后,刷新令牌会自动缓存。

def initialize_user_login():
    unity_cloud.initialize()
    unity_cloud.identity.user_login.use()

    auth_state = unity_cloud.identity.user_login.get_authentication_state()
    if auth_state != unity_cloud.identity.user_login.Authentication_State.LOGGED_IN:
        unity_cloud.identity.user_login.login()
注销

要注销,请执行以下步骤

  1. 按此顺序初始化以下模块
    1. unity_cloud
    2. unity_cloud.identity.user_login.use()
    3. (可选) unity_cloud.identity.user_login.login。有关更多信息,请参阅上面的“通过仪表盘初始化和登录用户”部分。
  2. 使用 clear_cache 参数设置为 TRUE 调用 logout 方法。
    调用该方法会将您从浏览器注销。
  3. (可选) 将 clear_cache 参数设置为 FALSE,以便下次调用 unity_cloud.identity.user_login.use() 时自动重新登录。
    unity_cloud.identity.user_login.logout(
      clear_cache = True
    )
获取登录用户的详细信息

要检索所有用户的详细信息,包括他们的访问令牌,请调用 get_current_user_info 方法。

    user_infos = unity_cloud.identity.user_login.get_current_user_info()
使用回调在用户登录期间跟踪身份验证状态

订阅身份验证状态更改使您能够在身份验证流程的每一步获得回调。

跟踪的状态包括:AWAITING_INITIALIZATIONAWAITING_LOGINLOGGED_INAWAITING_LOGOUTLOGGED_OUT

  def auth_state_callback(state):
      print(state)

    unity_cloud.identity.user_login.subscribe(
      event_type = unity_cloud.identity.user_login.AUTHENTICATION_STATE_CHANGED_EVENT,
      callback = auth_state_callback
    )
    unity_cloud.identity.user_login.login()
    unity_cloud.identity.user_login.logout(clear_cache = True)
    unity_cloud.identity.user_login.unsubscribe(
      event_type = unity_cloud.identity.user_login.AUTHENTICATION_STATE_CHANGED_EVENT,
      callback = auth_state_callback
    )

使用服务帐户执行面向应用程序的授权

服务帐户允许对内部无头场景(自动脚本、测试等)进行授权。

生成服务帐户
  1. 创建服务帐户.
  2. 确保将服务帐户凭据(key IDsecret key)存储在安全私密的位置。
    在您的集成中引用这些凭据,以授权您对 Unity 云服务的调用。
  3. 将服务帐户附加到组织或项目。
设置您的应用程序以使用服务帐户

在完成所需的 unity_cloud 初始化后,请传递通过仪表盘生成的您的服务帐户的 key idsecret key

    key_id = "1234abcd-ab12-cd34-ef56-123456abcdef"
    key = "12345678ABCDefgh-1234AbC-5678eFg"
    unity_cloud.identity.service_account.use(key_id=key_id, key=key)

获取可访问组织或项目的列表

要获取可访问组织或项目的列表,请执行以下步骤

  1. 使用 get_organization_list 方法检索所有可访问组织的列表。
  2. 使用组织 ID 调用 get_project_list 来检索其中包含的可访问项目。
    • (可选) 添加参数 limit_to 以限制返回结果的数量。保持不变或将其设置为 0 以返回所有内容。
    • (可选) 添加参数 skip 以指定在结果中跳过的集合数。将其与 limit_to 结合使用以对结果进行分页。
    orgs = unity_cloud.identity.get_organization_list()
    if len(orgs) != 0:
        projects = unity_cloud.identity.get_project_list_list(orgs[0].id)
        permissions = unity_cloud.identity.get_organization_permissions(orgs[0].id)
        roles = unity_cloud.identity.get_organization_roles(orgs[0].id)

get_organization_permissionsget_organization_rolesget_project_permissionget_project_roles 方法提供了有关从您选择的任何授权流程继承的角色和权限的更详细的信息。

创建项目

要创建项目,请执行以下步骤

  1. 使用新项目的名称和可选的元数据创建 ProjectCreation 对象。
  2. 使用 ProjectCreation 对象和组织 ID 调用 create_project
project_creation = ProjectCreation(name="myNewProject")
unity_cloud.identity.create_project(project_creation, org_id)

获取项目

要获取单个项目,请使用组织和项目 ID 调用 get_project

project = unity_cloud.identity.get_project(org_id, project_id)

列出组织中的用户

要列出与组织关联的所有用户,请使用组织 ID 调用 get_organization_user_info_list

users = unity_cloud.identity.get_organization_user_info_list(org_id)

列出项目中的用户

要列出与项目关联的所有用户,请使用组织和项目 ID 调用 get_project_user_info_list

users = unity_cloud.identity.get_project_user_info_list(org_id, project_id)

获取单个用户

要获取用户的详细信息,请使用组织和用户 ID 调用 get_user_info

user = unity_cloud.identity.get_user_info(org_id, user_id)