东莞市连易网络科技有限公司
东莞市连易网络科技有限公司
  • 网站
  • 用户
  • 购物车
  • 购物车
  • 搜索
  • 网站
  • 用户
帮助
帮助
开发文档 默认 REST Host
  • 用户文档
  • 开发文档
  • API文档
  • 提及
  • 标签
  • 更多
  • 取消
  • 新建
  • +开始
  • +UI 自定义
  • -外部集成
    • -REST API
      • -REST SDK
        • -Hosts
          • 基本请求
          • 客户端凭据 REST Host
          • 自定义 REST Host
          • 默认 REST Host
        • REST 最佳性能实践
      • 上传文件
      • 发起请求
      • 认证
    • Webhooks
    • +外部身份验证
  • +插件/框架扩展

默认 REST Host

默认 REST Host 是 SDK 中提供的最强大的 Host。此Host不仅允许访问 REST,还可以处理 OAuth 身份验证、本地用户解析、用户同步和单一登录。此 Host 类型只能在 Web 项目中使用。

生命周期

默认 REST Host 是自初始化的,这意味着它们在您首次请求时,从您提供的配置数据中加载自身。从那时开始,Host 在整个应用程序进程期间都保留在内存中。强制创建 Host 并使用 Host 本身的静态 GET 方法,根据名称从内存中检索 Host:

var restHost = Limyee.Extensibility.Rest.Version1.Host.Get("default");

设置

您需要在平台中创建一个私有的 OAuth 客户端,该客户端选中"信任客户端的授权代码"和"客户端凭据"的授权类型。对于回调 Url,它是应用程序中 oauth.ashx 文件的路径,默认情况下,该文件是在根目录(此文件由 SDK 安装)。例如,http://mysdksite.com/oauth.ashx mySDKSite.com 是第三方网站,而不是您的平台。

默认 REST Host 由 limyee_SDK.config 文件配置驱动。它包含名为"default"的 Host 的单个条目。如果您愿意,可以更改此名称,但要注意新名称,因为它稍后用于加载 Host。在所有示例中,我们将使用默认值。

下面是一个配置示例:

<limyeeHosts>
  <host name="default" limyeeUrl="http://mylimyeesite.com/">
    <oauth clientId="[Oauth Client Id]" 
           clientSecret="[OAuth Secret]" 
           callbackUrl="~/oauth.ashx" 
           cookieName="sdkUser"
           defaultLanguage="en-US"
           anonymousUsername="Anonymous">
      <localAuthentication enabled ="true" membershipAdministrationUsername="admin" />
      <sso enabled="true" synchronizationCookieName="LimyeeSdkSync" />
    </oauth>
   <remoteProxy enabled="false" callbackUrl="~/proxy.ashx" />
  </host>
</limyeeHosts>

Host 节点

<host name="default" limyeeUrl="http://mylimyeesite.com/">

这是用于定义Host的主节点,所有其他配置选项都是此节点的子元素。此节点除了包含其他配置选项外,还标识 2 条信息:

  • name:标识 Host 的名称,并将用于在代码中引用此 Host。如果有多个Host,则名称必须是唯一的。
  • limyeeUrl:平台站点的完全限定域名

oauth 节点

这是另一个必需的节点,因为它标识了如何向平台进行身份验证。它是 Host 节点的直接后代。它使用基于授权代码的身份验证、OAuth 和客户端凭据的组合。

<host name="default" limyeeUrl="http://mylimyesite.com/">
    <oauth clientId="[Oauth Client Id]" 
           clientSecret="[OAuth Secret]" 
           callbackUrl="~/oauth.ashx" 
           cookieName="sdkUser"
           defaultLanguage="en-US"
           anonymousUsername="Anonymous">
    </oauth>
    <remoteProxy enabled="false" callbackUrl="~/proxy.ashx" />
</host>

除了子配置对象之外,oauth 节点还需要以下信息:

  • clientId:您之前设置的平台 OAuth 客户端 ID
  • clientSecret:您之前设置的平台 OAuth 客户端密钥
  • callbackUrl:与 SDK 一起安装的 oauth.ashx 的相对应用程序路径。默认情况下,它位于根目录(~/oauth.ashx) 中。
  • cookieName:这是 SDK 为跟踪用户而写入的 Cookie 的名称。这样可以防止 SDK 进行连续调用身份验证。
  • defaultLanguage:匿名用户使用的语言。
  • anonymousUsername:这是用户未被视为已通过身份验证时使用的帐户。它必须是现有用户帐户,建议使用默认的匿名帐户。

使用平台用户进行身份验证

默认行为是启动 OAuth 流程,并允许用户使用平台账户登录到平台,然后为站点提供 SDK 使用的令牌。但是,在此过程中,您需要创建一个登录链接供用户使用。您可以使用此Host的方法执行此操作:

var restHost = Host.Get("default");
var loginUrl = restHost.LimyeeOAuthLoginUrl(returnUrl);

注销略有不同。在这里,您需要创建一个方法,可以通过触发回调或重定向到页面,来执行以下代码:

var restHost = Host.Get("default");
restHost.LimyeeOAuthLogout();

使用现有用户帐户

<oauth clientId="[Oauth Client Id]" 
           clientSecret="[OAuth Secret]" 
           callbackUrl="~/oauth.ashx" 
           cookieName="sdkUser"
           defaultLanguage="en-US"
           anonymousUsername="Anonymous">
    <localAuthentication enabled ="true" membershipAdministrationUsername="admin" />
</oauth>

如果要使用已定义的用户群,可以通过在 oauth 节点下添加 localAuthentication 节点,启用它并使用以下参数对其进行配置:

  • enabled:打开或关闭节点,而无需将其删除。
  • membershipAdministrationUsername:具有足够权限来管理平台中的用户。

您还需要连接 Host 对象以识别系统中的用户。您必须至少提供用户名和电子邮件地址,并且该地址在平台中必须是唯一的。如果您允许重复的用户名或电子邮件,则需要以某种方式解决此问题,因为平台不允许这样做。它的工作方式是 SDK 会询问您的应用程序谁已登录。使用您提供的信息,用户将找到自己的帐户或自动创建一个新帐户。SDK 请求此信息的方式是通过Host 的 ResolveLocalUser 函数。应在应用程序启动时定义此项。

var restHost = Limyee.Extensibility.Rest.Version1.Host.Get("default");
restHost.ResolveLocalUser = (host, resolveArgs) =>
{
    //This where you identify your logged in user
    return new Limyee.Extensibility.Rest.Version1.LocalUser("jdoe", "jdoe@somedomain.com");
};

单点登录

*要在您的网站和平台上使用单点登录,必须共享一个域。

如果要使用 SSO,请先登录到平台管理>集成>用户同步Cookie。

  1. 启用用户同步 Cookie。
  2. 设置网站和平台的域。如果您在 local.com 上有一个站点,但在 limyee.local.com 有一个平台,请将其设置为 .local.com。
  3. 如果需要,请更改 Cookie 名称。 记录此值供以后使用。
  4. 点击保存。

若要在站点上使用单一登录,请将 sso 节点添加到 limyee_SDK.config 文件中的 oauth 节点后代。

<oauth clientId="[Oauth Client Id]" 
       clientSecret="[OAuth Secret]" 
       callbackUrl="~/oauth.ashx" 
       cookieName="sdkUser"
       defaultLanguage="en-US"
       anonymousUsername="Anonymous">
    <localAuthentication enabled ="true" membershipAdministrationUsername="admin" />
    <sso enabled="true" synchronizationCookieName="LimyeeSync" />
</oauth>

调整此节点上的属性:

  • enabled:打开或关闭此功能。
  • synchronizationCookieName:此值必须与您为平台设置的用户同步 Cookie 名称相匹配。

一旦你完成了这项工作,你可能需要对平台进行调整。由于这不是传统的 SSO 模块,因此您需要通过编辑小组件来调整平台中的登录和注销链接。他们现在需要指向您的自定义登录或注销屏幕。

它是如何运作的

首次从 Host 进行 REST 调用时,它将以静默方式调用 SSO 进程。它通过使用用户信息签署重定向 URL 并将其发送到平台来实现此目的,平台然后验证信息并登录用户。它写入同步 Cookie,以便平台在用户被重定向到平台时记住登录者。

如果要在首次登录时强制执行该过程,而不是等待第一次使用,则可以执行此操作。您将代码注入到身份验证代码中。最合适的位置是在对用户进行身份验证后重定向用户之前。

//This would be whatever returnUrl you would redirect to after authentication
string returnUrl = "http://locahost"; 

//Your authentication code for your site

//before redirecting
var restHost = Host.Get("default");
var newReturnUrl = restHost.ProcessSynchronizedLogin(returnUrl);
HttpContext.Current.Response.Redirect(newReturnUrl);

这将获取您的返回 URL,将其添加到已签名的平台 URL,然后重定向到强制登录的新平台 URL。完成后,平台会将您重定向到原始网址。

注销是一个相同的过程,但在注销代码中,您将使用:

//This would be whatever returnUrl you would redirect to after authentication
string returnUrl = "http://locahost"; 

//Your logout code for your site

//before redirecting
var restHost = Host.Get("default");
var newReturnUrl = restHost.ProcessSynchronizedLogout(returnUrl);
HttpContext.Current.Response.Redirect(newReturnUrl);

网址代理

所有 REST URL 都会将您所有限定的 URL 返回到您的平台。如果您不想重定向到平台,您可以告诉 SDK 返回代理。这意味着您过去获取平台 URL 的位置,现在您将收到指向本地 http 处理程序的 url。该处理程序将调用一个Host进程,您可以在其中决定要返回的 url。

将新的 ASHX 文件添加到您的网站,并将源文件设置为

<%@ WebHandler Language="C#" Class="Limyee.Extensibility.Rest.Version1.UrlProxy, Limyee.Rest.SDK"  %>

您还可以使用同一类将处理程序注册为路由或其他方法。

作为Host节点的子节点,添加如下所示的远程代理节点:

<host name="default" limyeeUrl="http://mylimyeesite.com/">
    <oauth clientId="[Oauth Client Id]" 
           clientSecret="[OAuth Secret]" 
           callbackUrl="~/oauth.ashx" 
           cookieName="sdkUser"
           defaultLanguage="en-US"
           anonymousUsername="Anonymous">
      <localAuthentication enabled ="true" membershipAdministrationUsername="admin" />
      <sso enabled="true" synchronizationCookieName="LimyeeSync" />
    </oauth>
   <remoteProxy enabled="true" callbackUrl="~/proxy.ashx" />
</host>

设置属性:

  • enabled:打开或关闭此功能。
  • callbackUrl:您刚刚创建的处理程序的相关应用程序 URL。

当应用程序启动时,您将需要添加处理 URL 的函数:

var restHost = Host.Get("default");
restHost.GetRedirectUrl = (host, url, urlArgs) =>
{
   // The url parameter is the you can use it to evaluate if you need to redirect it.
   // Return the Url you wish to redirect to
   return url;
};

您将获得正在调用的 Host 实例、正在请求的平台 url 以及允许您访问当前 HttpContext 的对象等作为参数。

评估传入的 URL 以满足您的需求,如果您希望将其发送到另一个 Url,请返回新的目标 URL。假如,您不希望将其发送到其他网址,只需按原样返回发送的网址即可。如果要分析来自平台 URL 的上下文特定信息,可以使用函数对远程实体端点进行 REST 调用,并为其传入 Url。

多个 Host

如果需要,可以有多个 Host。例如,如果您有多个平台要使单个应用程序与之通信,或者您的应用程序支持多个站点并且每个站点都映射到一个 Host。则可能需要这样做。

另一个 Host 只要配置另一个 Host 节点:

<limyeeHosts>
  <host name="default" limyeeUrl="http://mylimyeesite.com/">
    <oauth clientId="[Oauth Client Id]" 
           clientSecret="[OAuth Secret]" 
           callbackUrl="~/oauth.ashx" 
           cookieName="sdkUser1"
           defaultLanguage="en-US"
           anonymousUsername="Anonymous">
      <localAuthentication enabled ="true" membershipAdministrationUsername="admin" />
      <sso enabled="true" synchronizationCookieName="LimyeeSync" />
    </oauth>
   <remoteProxy enabled="false" callbackUrl="~/proxy.ashx" />
  </host>
  <host name="SiteB" limyeeUrl="http://myanotherlimyeesite.com/">
    <oauth clientId="[Oauth Client Id]" 
           clientSecret="[OAuth Secret]" 
           callbackUrl="~/oauth.ashx" 
           cookieName="skdUser2"
           defaultLanguage="en-US"
           anonymousUsername="Anonymous">
      <localAuthentication enabled ="true" membershipAdministrationUsername="admin" />
      <sso enabled="true" synchronizationCookieName="LimyeeSync" />
    </oauth>
   <remoteProxy enabled="false" callbackUrl="~/proxy.ashx" />
  </host>
</limyeeHosts>

您需要确保它是不同的主机名。此外,您还可以考虑使用不同的 Cookie 名称以避免冲突。您不需要使用多个 oauth.ashx 或 proxy.ashx,因为它们可以识别主机实例。

然后,您按名称获得新主机:

var restHost = Host.Get("SiteB");

  • 分享
  • 历史
  • 更多
  • 取消
相关
推荐
Copyright © 2021 东莞市连易网络科技有限公司. All rights reserved.
Powered by Limyee Commerce System(3.0.0). © 2014 - 2025 Limyee Inc.