(旧版)Android SDK指南 android-sdk-cookbook

NOTE
此页面上的内容仅供参考。 使用此API需要来自Adobe的当前许可证。 不允许未经授权使用。
IMPORTANT
确保随时了解汇总在产品公告页中的最新Adobe Pass身份验证产品公告和停用时间表。

简介 intro

本文档介绍了权利工作流,程序员的高级别应用程序可以通过Android AccessEnabler库公开的API实施这些工作流。

适用于Android的Adobe Pass身份验证权利解决方案最终分为两个域:

  • UI域 — 这是上层应用程序层,用于实施UI并使用AccessEnabler库提供的服务来提供对受限内容的访问。

  • AccessEnabler域 — 这是权利工作流的实施形式:

    • 对Adobe后端服务器发出的网络调用
    • 与身份验证和授权工作流相关的业务逻辑规则
    • 管理各种资源和处理工作流状态(如令牌缓存)

AccessEnabler域的目标是隐藏授权工作流的所有复杂内容,并(通过AccessEnabler库)向上层应用程序提供一组用于实施授权工作流的简单授权基元:

  1. 设置请求者身份。

  2. 检查并获取针对特定身份提供者的身份验证。

  3. 检查并获取特定资源的授权。

  4. 注销。

AccessEnabler的网络活动发生在不同的线程中,因此从不阻止UI线程。 因此,两个应用程序域之间的双向通信渠道必须遵循完全异步模式:

  • UI应用程序层通过AccessEnabler库公开的API调用,将消息发送到AccessEnabler域。
  • AccessEnabler通过AccessEnabler协议(UI层向AccessEnabler库注册)中包含的回调方法来响应UI层。

权利流 entitlement

A.先决条件 prereqs

  1. 创建回调函数:

    • 'setRequestorComplete()'

      setRequestor()触发,返回成功或失败。
      成功表示您可以继续权利调用。

    • displayProviderDialog(mvpd)

      仅当用户尚未选择提供程序(MVPD)且尚未进行身份验证时,才由getAuthentication()触发。
      mvpds参数是用户可用的提供程序数组。

    • 'setAuthenticationStatus(status, errorcode)'

      每次由checkAuthentication()触发。
      仅当用户已验证并已选择提供程序时,才由getAuthentication()触发。

      返回的状态是成功或失败,错误代码描述失败的类型。

    • navigateToUrl(url)

      在用户选择MVPD后由getAuthentication()触发。 url参数提供MVPD登录页面的位置。

    • 'sendTrackingData(event, data)'

      checkAuthentication(), getAuthentication(), checkAuthorization(), getAuthorization(), setSelectedProvider()触发。
      event参数指示发生的授权事件;data参数是与事件相关的值列表。

    • 'setToken(token, resource)'

      成功授权查看资源后由checkAuthorization()getAuthorization()触发。
      token参数是短期媒体令牌;resource参数是用户有权查看的内容。

    • 'tokenRequestFailed(resource, code, description)'

      在授权失败后由checkAuthorization()getAuthorization()触发。
      resource参数是用户尝试查看的内容;code参数是指示所发生失败类型的错误代码;description参数描述与错误代码关联的错误。

    • 'selectedProvider(mvpd)'

      getSelectedProvider()触发。
      mvpd参数提供有关用户选择的提供程序的信息。

    • 'setMetadataStatus(metadata, key, arguments)'

      getMetadata().触发
      metadata参数提供您请求的特定数据;key参数是getMetadata()请求中使用的键;arguments参数是传递给getMetadata()的同一词典。

    • '预授权资源(资源)'

      checkPreauthorizedResources()触发。
      authorizedResources参数表示用户有权查看的资源。

B.启动流程 startup_flow

  1. 启动上层应用程序。

  2. 启动Adobe Pass身份验证

    a.调用getInstance以创建Adobe Pass Authentication AccessEnabler的单个实例。

    • 依赖项: Adobe Pass身份验证(本机)
      Android Library (AccessEnabler)

    b.调用 setRequestor()以建立程序员的标识;传入程序员的requestorID和(可选)Adobe Pass身份验证终结点数组。

    • 依赖项:​有效的Adobe Pass身份验证请求者ID
      (请与您的Adobe Pass身份验证客户经理合作安排此操作。)

    • 触发器: setRequestorComplete()回调

    table 0-row-2 1-row-2
    注意
    在完全建立请求者身份之前,无法完成任何授权请求。 这实际上意味着,在setRequestor()仍在运行时,所有后续的权利请求(例如,checkAuthentication())都将被阻止。

    您有两个实施选项:将请求者标识信息发送到后端服务器后,UI应用层可以选择以下两种方法之一:

    1. 等待setRequestorComplete()回调的触发(AccessEnabler委托的一部分)。 此选项可让您最确定已完成setRequestor(),因此建议对大多数实施使用此选项。
    2。 继续而不等待setRequestorComplete()回调的触发,并开始发出授权请求。 这些调用(checkAuthentication、checkAuthorization、getAuthorization、getAuthorization、checkPreauthorizedResource、getMetadata、logout)由AccessEnabler库排队,该库将在setRequestor(). 后进行实际的网络调用。例如,如果网络连接不稳定,此选项有时可能会中断。
  3. 调用checkAuthentication()以检查现有身份验证,而不启动完整的身份验证流程。 如果此调用成功,您可以直接进入授权流程。 如果没有,请继续进入身份验证流程。

    • 依赖项:​成功调用setRequestor()(此依赖项也适用于所有后续调用)。

    • 触发器: setAuthenticationStatus()回调

C.身份验证流程 authn_flow

  1. 调用getAuthentication()以启动身份验证流程,或获取用户已进行身份验证的确认。
    触发器:

    • setAuthenticationStatus()回调(如果用户已经过身份验证)。 在这种情况下,请直接进入授权流
    • displayProviderDialog()回调(如果用户尚未经过身份验证)。
  2. 向用户显示发送给displayProviderDialog()的提供程序列表。

  3. 用户选择提供程序后,从navigateToUrl()回调中获取用户MVPD的URL。 打开WebView并将该WebView控件定向到URL。

  4. 通过上一步中实例化的WebView,用户登陆MVPD的登录页面并输入登录凭据。 在WebView中执行了若干重定向操作。

    注意:​此时,用户有机会取消身份验证流程。 如果发生这种情况,您的UI层将负责使用setSelectedProvider()作为参数调用null,以便向AccessEnabler通知此事件。 这允许AccessEnabler清理其内部状态并重置身份验证流程。

  5. 用户成功登录后,应用层将检测“自定义重定向URL”(即: http://adobepass.android.app)的加载。 此自定义URL实际上是一个无效URL,不适用于WebView加载。 它是身份验证流程已完成,并且需要关闭WebView的信号。

  6. 关闭WebView控件并调用getAuthenticationToken(),这会指示AccessEnabler从后端服务器检索身份验证令牌。

  7. [可选]调用checkPreauthorizedResources(resources)以检查用户有权查看哪些资源。 resources参数是与用户的身份验证令牌关联的受保护资源的数组。
    触发器: preAuthorizedResources()回调
    完成身份验证流程后​执行点:

  8. 如果身份验证成功,请转到授权流。

D.授权流程 authz_flow

  1. 调用getAuthorization()以启动授权
    流量。

    依赖项:与MVPD约定的有效ResourceID。

    注意: ResourceID应该与任何其他设备或平台上使用的相同,并且在MVPD中应该相同。

  2. 验证身份验证和授权。

    • 如果getAuthorization()调用成功:用户具有有效的AuthN和AuthZ令牌(用户已通过身份验证并有权观看请求的媒体)。

    • 如果getAuthorization()失败:检查引发的异常以确定其类型(AuthN、AuthZ或其他内容):

      • 如果这是身份验证(AuthN)错误,则重新启动身份验证流程。
      • 如果是授权(AuthZ)错误,则用户无权观看请求的媒体,并且应向用户显示某种错误消息。
      • 如果出现其他类型的错误(连接错误、网络错误等),则向用户显示相应的错误消息。
  3. 验证短媒体令牌。
    使用Adobe Pass身份验证媒体令牌验证器库验证从上述getAuthorization()调用返回的短期媒体令牌:

    • 如果验证成功:为用户播放请求的媒体。
    • 如果验证失败:AuthZ令牌无效,应拒绝媒体请求,并向用户显示错误消息。
  4. 返回到正常应用程序流程。

E.查看媒体流 media_flow

  1. 用户选择要查看的媒体。
  2. 媒体是否受保护? 您的应用程序会检查所选媒体是否受保护:
  • 如果所选媒体受到保护,您的应用程序将启动上面的授权流
  • 如果所选媒体未受保护,则为用户播放该媒体。

F.注销流程 logout_flow

  1. 调用logout()以注销用户。
    AccessEnabler将为当前请求者和具有单点登录的请求者清除当前MVPD的所有缓存值和令牌。 清除缓存后,AccessEnabler会进行服务器调用以清除服务器端会话。 请注意,由于服务器调用可能会导致到IdP的SAML重定向(这允许IdP端的会话清理),因此此调用必须遵循所有重定向。 因此,必须在WebView控件中处理此调用。

    a.遵循与身份验证工作流相同的模式,AccessEnabler域向UI应用程序层发出请求(通过navigateToUrl()回调)以创建WebView控件,并指示该控件在后端服务器上加载注销端点的URL。

    b.同样,UI必须监视WebView控件的活动,并检测控件在经历多次重定向时加载应用程序的自定义URL(即: http://adobepass.android.app/)的时间。 发生此事件后,UI应用程序层会关闭WebView并完成注销过程。

    注意:​注销流程与身份验证流程的不同之处在于,用户不需要以任何方式与WebView交互。 UI应用程序层使用WebView来确保遵循所有重定向。 因此,可以(并且建议)在注销过程中使WebView控件不可见(即隐藏)。

使用多个MVPD登录和注销的用户流 user_flows

此处您有一份文档描述了使用多个MVPD时的行为,以及用户从应用程序注销时发生的情况。

使用Android SDK版本>= 2.0.0时,可以使用此描述的行为。

recommendation-more-help
3f5e655c-af63-48cc-9769-2b6803cc5f4b