使用Google会话和帐户选择器的移动应用浏览器的行为

Kar*_*iya 17 android google-chrome single-sign-on ios google-oauth2

问题:尝试在移动应用之间创建SSO.和浏览器.

我们有什么:

我们有一个离子移动应用程序.使用OAuth 2.0身份验证"使用Google登录".我们有多个内部应用程序可以在OAuth2和SAML上运行,因此我们为GSuite启用了SSO,以便所有应用程序可以使用一个登录名和密码无缝地工作.现在,当我们点击"使用Google登录"按钮时,

  1. 在浏览器应用中打开SSO登录页面.我们启用了SSO,因此我们设置了login_hint,这有助于我们直接将我们带到SSO登录页面.

  2. 用户输入useremail和password,并在使用OAuth 2代码参数成功进行身份验证后重定向到redirect_uri.

  3. redirect_uri是以一种方式完成的,当url被触发时,它会再次使用OAuth 2代码param重定向回我们的Android应用程序,然后我们从token和userinfo端点提取access_token和useremail.

  4. 根据授权,仪表板显示指向我们内部应用程序的链接.适用于Google SAML 2.0或OAuth2身份验证.

预期结果:

当用户点击移动应用中的任何SAML/OAuth 2链接时.仪表板,我们在浏览器应用程序中打开该链接.它应该自动登录到该应用程序.并将我们带到目标网页,因为我们已经在步骤#a中设置了Google会话.

偏离预期的事情:

  • 当我们尝试访问SAML/OAuth应用时,当Chrome浏览器中设置了一个配置文件时,它会显示帐户选择器,其中列出了设备中同步的所有帐户,但没有列出用#b登录的用户.它应该显示该帐户或直接登录并显示登录页面.当我们没有设置chrome配置文件时,它就不会发生.
  • 当我们执行以下操作时,所有浏览器中的会话都会自动终止,因此会再次请求凭据.
    • 关闭浏览器选项卡(有时).
    • 从最近的应用程序托盘清除浏览器(大多数时间)
    • 重启设备(总是)

想要了解如何以及何时在手机中的谷歌浏览器中自动创建和杀死会话?

有什么地方保持会话完整吗?|有没有办法再通过显示与手机同步的帐户的帐户选择器?

更新

能够找出奇怪的观察结果:我们保持SSO关闭,以便谷歌登录屏幕出现.有了这一切一切正常.即使重新启动浏览器或手机,无论Android还是iOS,都不会终止会话.

所以问题在于我们设计的SSO.无法确定我们发布到Google的ACS网址的SAML XML中要设置的内容.

alb*_*elu 5

1. 想了解在手机的谷歌浏览器中会话是如何以及何时自动创建和终止的?

我认为谷歌浏览器在手机中的行为与在计算机中的行为相同,因此使用HTML5 sessionStorage、用户配置和设备策略创建和终止会话:

到目前为止,有两种类型的Web Storage,它们是 localStorage 和 sessionStorage。主要区别在于 localStorage在不同的选项卡或窗口中持续存在,即使我们关闭浏览器,也相应地与域安全策略和用户对配额限制的选择有关。

此外,了解Chrome 如何保存和同步密码也很重要:

Chrome 保存和同步密码的方式(在计算机和 Android 设备中)取决于您是否要跨设备存储和使用它们。同步后,您可以在所有设备上的 Chrome 以及 Android 设备上的某些应用中使用密码。

如果满足以下任一条件,您的密码就会保存到您的 Google 帐户中:

  • 您已登录 Chrome 并正在同步密码
  • 您在 Android 上使用 Smart Lock 密码

否则,您的密码只会存储在计算机或 Android 设备上的 Chrome 中。

Chrome 保存和同步密码的方式(在 iPhone 和 iPad 设备中)取决于您是否想要跨设备存储和使用它们。

如果您登录 Chrome 并同步密码,您的密码就会保存到您的 Google 帐户中。

否则,您的密码只会存储在 iPhone 或 iPad 上的 Chrome 中。


2. 有没有办法保持会话完好无损?

我对 iOs 或 HTML5 开发不熟练/不感兴趣,但是当 Google在 Android 上推出Smart Lock for Passwords时,我尝试了类似的 Android 和旧版 Google Apps 域:

以编程方式保存和检索凭据,并在 Chrome 中跨设备和网站自动登录用户。

注意:您的服务器需要 SSL 以启用跨应用程序和网站的自动登录

Smart Lock for Passwords and Connected Accounts API有助于保存和检索您的应用程序和关联站点的凭据

您可以处理多个保存的凭据手动删除存储的凭据

当需要用户输入来选择凭证时,getStatusCode() 方法返回 RESOLUTION_REQUIRED。在这种情况下,调用状态对象的 startResolutionForResult() 方法来提示用户选择一个帐户。然后,通过将 Credential.EXTRA_KEY 传递给 getParcelableExtra() 方法,从活动的 onActivityResult() 方法中检索用户选择的凭据。

登录使用ID令牌时凭据对象的用户的ID在设备上登录谷歌的帐户的用户ID匹配可用。

如何实现它以及有用的场景以在相关的 SO 答案中测试检查它。


3. 有没有办法绕过显示与手机同步的帐户的帐户选择器?

将 Google 登录与 IT 应用程序结合使用

将应用程序列入白名单,以便您的用户在登录时不会看到确认屏幕。这一步,结合接下来的步骤(第 4 点:将帐户的 Google for Work 域传递到身份验证服务器,因此只有该域中的帐户是在登录期间显示),确保您的 IT 应用程序的用户可以自动登录。要将您的应用程序列入白名单:

  • 打开G Suite 管理控制台
  • 单击安全图标,然后单击显示更多 > 高级设置 > 管理 API 客户端访问。

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

  • 输入您为应用程序注册的 OAuth 客户端 ID。客户端 ID 通常是一串字母和数字,后跟 .apps.googleusercontent.com。
  • 在 API 范围字段中,输入以下字符串:https : //www.googleapis.com/auth/plus.me,https : //www.googleapis.com/auth/userinfo.email
  • 如果您的应用需要请求额外的范围来访问 Google API,请在此处指定它们。
  • 单击授权。白名单将在大约 30 分钟后生效。

注意:如果应用程序启动 OAuth/Open ID Connect 流程并包含参数offlineprompt ,则白名单将不起作用。IT 应用程序通常不需要这些参数。

在 OAuth2 授权 URL 中强制/绕过谷歌帐户选择器

OAuth2 授权 URL 支持以下参数:prompt

当前,它可以具有值“ none”、“ select_account”和“ consent”。

none : 将导致谷歌不显示任何UI,因此如果用户需要登录失败,或者在多重登录的情况下选择一个帐户,或者在第一次批准时同意。它可以在不可见的 i-frame 中运行,以便在您决定(例如,呈现授权按钮)之前从先前授权的用户那里获取令牌。

同意:即使用户先前已授权您的应用程序,也会强制显示批准页面。在一些极端情况下可能很有用,例如,如果您丢失了用户的 refresh_token,因为 Google 仅在明确同意操作时发布 refresh_token。

select_account:将导致帐户选择器显示,即使只有一个登录用户,正如您所问的那样。

select_account 可以与 permit 结合使用,如下所示:prompt=select_account+consent

通过 JS 客户端库使用授权

由于以下参数,您没有看到多用户选择屏幕: authuser=0 这将自动选择您登录的第一个帐户(authuser=1 将选择第二个等等)。


4. 更新:关闭 SSO 后一切正常...会话不会被终止...

基于 SAML 的联合 SSO

以下是如何通过 SAML 为 Slack® 应用程序设置单点登录 (SSO)

使用安全断言标记语言 (SAML),您的用户可以使用他们的 GCP 凭据登录企业云应用。

作为管理员,您必须配置一些东西才能使其工作,包括:

  • 将所选应用程序设置为 SAML 服务提供商 (SP)。
  • 将 G Suite 设置为 SAML 身份提供商 (IdP)。
  • 在 Google 管理控制台中输入特定于应用程序的服务提供商详细信息。
  • 为应用程序启用单点登录 (SSO)。
  • 验证 SSO 是否正常工作。

配置预先集成的云应用程序或您自己的 SAML 应用程序

登录。单击应用程序 > SAML 应用程序。选择将服务/应用程序添加到您的域并设置:

在此处输入图片说明

打开 SSO 到您的新 SAML 应用程序

登录到您的管理控制台。转到 应用程序 > SAML 应用程序

选择应用程序。在灰色框的顶部,单击更多设置并选择:

  • 为所有人打开为所有用户打开服务(再次单击以确认)。
  • 关闭为所有用户关闭服务(再次单击以确认)。
  • 对于某些组织,仅针对某些用户更改设置。

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

将 Google 登录与 IT 应用程序结合使用

以下是针对自定义开发的 IT 应用程序将 Google Sign-In 与工作帐户一起使用时要采取的步骤清单。如果您正在开发移动应用程序,请同时参考移动设备的最佳实践

如果您的应用程序知道帐户的 Google for Work 域,则应将该域传递给身份验证服务器,以便在登录期间仅显示该域中的帐户。在 Android 上,这是通过 setHostedDomain 构建器方法完成的,而在 iOS 上,这是通过hostsDomain属性完成的 。

这也是使用hd带有 REST 端点的参数和带有 JavaScript API 的托管域参数来完成的。


5. 什么...在我们发布到 Google ACS URL 的 SAML XML 中设置。

为 SAML 集成配置提供者元数据

SAML 元数据用于在身份提供商 (IdP) 和服务提供商 (SP) 之间共享配置信息。IdP 和 SP 的元数据在 XML 文件中定义:

IdP 元数据 XML 文件包含 IdP 证书、实体 ID、重定向 URL 和发布 URL,例如 saml_idp_metadata.xml

<?xml version="1.0" encoding="UTF-8"?>
  <md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" entityID="https://test.my.company.com" validUntil="2024-08-13T07:37:40.675Z">
    <md:IDPSSODescriptor WantAuthnRequestsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
      <md:KeyDescriptor use="signing">
        <ds:KeyInfo>
          <ds:X509Data>
            <ds:X509Certificate>encoded_certificate</ds:X509Certificate>
          </ds:X509Data>
        </ds:KeyInfo>
      </md:KeyDescriptor>
    <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>
    <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://https://test.my.company.com/idp/endpoint/HttpPost"/>
    <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://test.my.company.com/idp/endpoint/HttpRedirect"/>
  </md:IDPSSODescriptor>
</md:EntityDescriptor>
Run Code Online (Sandbox Code Playgroud)

SP 元数据 XML 文件包含 SP 证书、实体 ID 和断言消费者服务 URL (ACS URL),例如 saml_sp_metadata.xml

<EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" entityID="http://client.mydomain.com:80/webconsole">
  <SPSSODescriptor WantAssertionsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
    <AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="http://client.mydomain.com:80/webconsole/samlAcsCallback.do" isDefault="true"/>
    <KeyDescriptor>
      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:X509Data>
          <ds:X509Certificate>encoded_certificate</ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>
    </KeyDescriptor>
    <NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:entity</NameIDFormat>
  </SPSSODescriptor>
</EntityDescriptor>
Run Code Online (Sandbox Code Playgroud)

在使用 SAML 登录 Web 控制台之前,必须上传来自 IdP 的元数据,并且必须生成来自 SP 的元数据。SP 元数据生成后,必须与 IdP 共享。有关共享 SP 元数据的说明,请联系 IdP。

使用 SAML 协议创建身份提供者 (IdP) 元数据 XML 文件。对于SAML元数据规范,转到绿洲网站元数据为OASIS安全断言标记语言(SAML)V2.0

创建密钥库文件。有关密钥库文件的信息,请参阅 为 SAML 集成创建证书

有关 keytool 实用程序的更多信息,请访问Oracle 文档网站keytool - 密钥和证书管理工具

SAML 服务提供商 URL

要将 G Suite 设置为 SAML 身份提供商 (IdP),您需要为您计划设置的每个预配置云应用程序输入 SAML 服务提供商网址。

每个预配置云应用程序的实体 ID、ACS URL 和启动 URL 值的链接


6. 单点登录 (SSO) 故障排除

当 Google 是服务提供商 (SP) 时,本文档 提供了解决在将基于 SAML 的单点登录 (SSO)与 G Suite集成或使用期间遇到的常见错误消息的步骤。