在 SDK 中可用的 2 个Host中,客户端凭据 REST Host 是最直接且易于使用的Host。传统上,它可以使用所需的信息作为构造函数参数进行实例化,也可以使用应用程序配置文件来存储信息。它也是唯一可以在基于 Web 的应用程序之外使用的附带 Host。客户端凭据 REST Host 主要用于工具应用程序,而不是集成。
设置
如果安装了 SDK,则安装了 limyee_SDK.config 文件和 oauth.ashx 文件。如果仅计划使用客户端凭据 REST Host,则可以删除这些文件,因为它们未被使用。
客户端凭据 REST Host 要求您在平台站点上创建 OAuth 客户端。此客户端应使用客户端凭据授权类型,并且是机密客户端。有关创建 OAuth 客户端和使用授权类型的更多信息,请参阅:REST API 身份验证。记录您的客户端 ID 和客户端密码。
此 Host 需要 4 条信息才能工作:
- deafaultUsername:Host 在不模拟时将主要使用的用户
- limyeeUrl:平台的完全限定域名
- clientId:您创建的 Oauth 客户端的客户端 ID
- clientSecret:您创建的 Oauth 客户端的客户端机密
您有 2 个选项可用于创建 Host。第一个选项只是像其他类一样实例化它,传递必需的参数:
var host = new ClientCredentialsRestHost("admin" ,"http://mylimyeesite.com" , "[Your Client Id]" , "[Your Client Secret]");
第二种是使用应用程序配置文件。在解决方案中找到 web.config 或 app.config 文件,如果不存在则添加一个。如果<AppSettings />节点不存在,请添加该节点,然后使用在 OAuth 客户端设置的值添加以下信息:
<appSettings> <add key="limyeeUrl" value="[http://mylimyeesite.com]" /> <add key="defaultUsername" value="admin" /> <add key="clientId" value="[Oauth Client Id]" /> <add key="clientSecret" value="[Oauth Client Secret]" /> </appSettings>
如果尝试使用 Host 的默认构造函数实例化 Host 且尚未在配置中设置值,则会收到错误。
生命周期
客户端凭据 REST Host与任何其他类一样,可在创建它的作用域继续使用。创建客户端凭据 REST Host并不昂贵,但也不必经常这样做。通常,每个应用程序只需创建一次 Host。如果需要其他平台或备用配置,可以创建多个 Host,但只有 1 个 Host 可以使用应用程序配置来存储值,所有其他Host都必须使用构造函数。
身份验证和模拟
如前所述,客户端凭据 REST Host使用 OAuth 进行身份验证,特别是客户端凭据授权。这意味着,当它使用默认用户时,它会为该用户请求访问令牌,并用于对所有非模拟的 REST 请求进行身份验证。如果要模拟,它将获取该用户的令牌,并将其用于模拟的范围。为了避免多个令牌请求,Host 将缓存它,以便于获取令牌的用户。由于可以缓存用户并且令牌可能已过期,因此 Host 还将获取刷新令牌。
模仿
Host 中模拟需要 2 个步骤。首先,您必须使用名为"Impersonate"的特定 Host 方法,该操作将允许在操作范围内发出的请求以其他用户身份运行。
var host = new ClientCredentialsRestHost(); //Assumes config values arein the config file host.Impersonate("userA", (h) => { //Stuff in here runs as userA });
此外,所有请求都必须将调用的 enableImpersonation 参数设置为 true(default)。 将其设置为 false 是一种正在请求范围内时选择退出模拟的方法。
var host = new ClientCredentialsRestHost(); //Assumes config values arein the config file host.Impersonate("userA", (h) => { //This will run as userA dynamic impersonatedResponse = host.GetToDynamic(1, "info.json",true); //This will run as the default user dynamic notImpersonatedResponse = host.GetToDynamic(1, "info.json", false); });