Unity 云服务要求调用者在您执行任何操作或访问其他模块(如 Assets
)之前获得适当的授权。
有两个模块可用于检索此类授权
unity_cloud.identity.user_login
unity_cloud.identity.service_account
一次只能使用一个模块。声明 unity_cloud.identity.user_login.use()
会阻止对 unity_cloud.identity.service_account
模块的任何调用,并抛出异常。
我该如何...?
使用用户登录进行身份验证
用户登录过程需要
- 手动从集成请求登录(或注销)。
- 输入您的 Unity 帐户凭据进行身份验证。
用户登录实现 OAuth 2.0 PKCE 标准流程来检索访问令牌,并依赖默认操作系统浏览器作为中间介质进行身份验证。
通过仪表盘初始化并登录
要使用标准用户登录,请执行以下步骤
- 调用
unity_cloud.identity.user_login.use()
来初始化user_login
模块。此操作会自动检查当前是否缓存了任何刷新令牌。如果是,则您已通过身份验证。 - 如果没有令牌,请调用
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()
注销
要注销,请执行以下步骤
- 按此顺序初始化以下模块
unity_cloud
unity_cloud.identity.user_login.use()
- (可选)
unity_cloud.identity.user_login.login
。有关更多信息,请参阅上面的“通过仪表盘初始化和登录用户”部分。
- 使用
clear_cache
参数设置为TRUE
调用logout
方法。
调用该方法会将您从浏览器注销。 - (可选) 将
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_INITIALIZATION
、AWAITING_LOGIN
、LOGGED_IN
、AWAITING_LOGOUT
和 LOGGED_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 )
使用服务帐户执行面向应用程序的授权
服务帐户允许对内部无头场景(自动脚本、测试等)进行授权。
生成服务帐户
- 创建服务帐户.
- 确保将服务帐户凭据(
key ID
和secret key
)存储在安全私密的位置。
在您的集成中引用这些凭据,以授权您对 Unity 云服务的调用。 - 将服务帐户附加到组织或项目。
设置您的应用程序以使用服务帐户
在完成所需的 unity_cloud
初始化后,请传递通过仪表盘生成的您的服务帐户的 key id
和 secret key
。
key_id = "1234abcd-ab12-cd34-ef56-123456abcdef" key = "12345678ABCDefgh-1234AbC-5678eFg" unity_cloud.identity.service_account.use(key_id=key_id, key=key)
获取可访问组织或项目的列表
要获取可访问组织或项目的列表,请执行以下步骤
- 使用
get_organization_list
方法检索所有可访问组织的列表。 - 使用组织 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_permissions
、get_organization_roles
、get_project_permission
和 get_project_roles
方法提供了有关从您选择的任何授权流程继承的角色和权限的更详细的信息。
创建项目
要创建项目,请执行以下步骤
- 使用新项目的名称和可选的元数据创建
ProjectCreation
对象。 - 使用
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)