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

时间:2017-02-27 13:21:23

标签: android ios google-chrome single-sign-on google-oauth2

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

我们拥有什么:

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

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

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

  3. redirect_uri以触发网址的方式完成, 它再次使用OAuth 2代码param重定向回我们的Android应用程序 然后我们从令牌中提取access_token和useremail userinfo端点。

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

  5. 预期结果:

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

    偏离预期的事情:

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

    想要了解如何以及何时在Google Chrome手机中自动创建和终止会话?

    是否有任何地方保持会话完好无损? |有没有办法再通过显示与电话同步的帐户的帐户选择器?

    更新

    能够弄清楚奇怪的观察: 我们保留了SSO,以便Google登录屏幕显示出来。有了这一切一切正常。即使重新启动浏览器或手机,无论Android还是iOS,都不会终止会话。

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

1 个答案:

答案 0 :(得分:4)

1。想要了解如何以及何时在手机中的Google Chrome中自动创建和终止会话?

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

  

到目前为止,Web Storage有两种类型,这些是。{   localStorage和sessionStorage。主要区别在于   localStorage会在不同的标签或窗口上显示,即使我们也是如此   关闭浏览器,相应地使用域安全策略和   用户对配额限制的选择。

另外,了解how Chrome saves and syncs passwords

非常重要
  

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

     

如果您的密码之一,您的密码会保存到您的Google帐户中   以下是真实的:

     
      
  • 您已登录Chrome并正在同步密码
  •   
  • 您正在使用   Android上的密码智能锁
  •   
     

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

     

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

     

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

     

否则,您的密码仅存储在iPhone或Chrome上的Chrome上   ipad公司

2。有什么方法可以保持会话的完整性吗?

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

  

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

注意:您的服务器上需要SSL Enable automatic sign-in across apps and websites

Smart Lock for Passwords和Connected Accounts API有助于保存和检索您的应用和相关网站的凭据

您可以Handle multiple saved credentialsmanually Delete stored credentials

  

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

当凭据对象的用户ID与在设备上登录的Google帐户的用户ID相匹配时,Sign In Using ID Tokens可用。

如何implement it以及testcheck相关SO答案中的有用方案。

第3。有没有办法再通过帐户选择器显示与电话同步的帐户?

Use Google Sign-In with IT Apps

  

将应用程序列入白名单,以便您的用户不会看到   他们登录时确认屏幕。这一步,结合了   后续步骤(第4点:将帐户的Google for Work域名传递给auth服务器,因此在登录时只显示该域中的帐户),确保IT应用程序的用户可以   自动登录。将您的应用列入白名单:

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

enter image description here enter image description here enter image description here

  
      
  • 输入您为该应用程序注册的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流并包含参数离线,则白名单将无效   的提示即可。 IT应用程序通常不需要这些参数。

Force/bypass google account chooser in OAuth2 authorization URLs

  

OAuth2授权网址支持以下参数:提示

     

目前它可以包含价值' none',' select_account'和' consent'

     

:会导致Google无法显示任何用户界面,因此如果用户失败则会失败   需要登录,或者在多次登录的情况下选择一个帐户,或者   首次批准同意。它可以在一个看不见的i帧中运行   在您决定之前,从先前授权的用户处获取令牌   例如,呈现授权按钮。

     

同意:即使用户,也会强制显示批准页面   之前已经授权您的申请。可能在一些人中很有用   例如,如果您丢失了用户的refresh_token,   因为Google仅在明确同意行动时发出refresh_tokens。

     

select_account :即使是,也会导致帐户选择器显示   就像你问的那样,只有一个登录用户。

     

select_account可以与同意相结合,如:prompt=select_account+consent

using authorisation via the JS client library

  

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

4。更新:关闭SSO一切正常......会话没有被杀......

SAML-based Federated SSO

Here's how to set up Single Sign-On (SSO) via SAML for the Slack® application

  

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

     

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

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

Configure the pre-integrated cloud applications or your own SAML app

  

Sign in。点击应用> SAML应用。选择   将服务/应用添加到您的域并设置:

enter image description here

Turn on SSO to your new SAML app

  

登录您的Admin console。去   应用> SAML应用

     

选择应用。在灰色框的顶部,点击更多设置和   中选择:

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

enter image description here enter image description here enter image description here

Use Google Sign-In with IT Apps

  

以下是使用Google时要采取的步骤清单   使用自定义开发的IT应用程序的工作帐户登录。如果   您正在开发移动应用,请参阅best practices for mobile

     

如果您的应用知道该帐户的Google for Work域名,那么您就是   应该将该域传递给auth服务器,以便只在其中进行帐户   登录时显示域名。在Android上,这是通过   setHostedDomain   构建器方法,在iOS上,这是通过   hostedDomain财产。

     

这也是使用带有REST端点的hd参数完成的   使用JavaScript API的hosted_domain参数。

5。在SAML XML中设置的内容是我们发布到Google的ACS网址。

Configuring Provider Metadata for SAML Integration

  

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

     

IdP元数据XML文件包含IdP证书,实体ID,   重定向网址和帖子网址,例如,   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>
  

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>
  

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

     

使用SAML创建身份提供商(IdP)元数据XML文件   协议。有关SAML元数据规范,请转到Oasis websiteMetadata for the OASIS Security Assertion Markup Language (SAML) V2.0

     

创建密钥库文件。有关密钥库文件的信息,请参阅   Creating Certificates for SAML Integration

     

有关keytool实用程序的详细信息,请转到Oracle Documentation websitekeytool - Key and Certificate Management Tool

SAML service provider URLs

  

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

     实体的

Links   每个预配置云的ID,ACS URL和起始URL值   应用

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

  

This document   提供了解决在此期间遇到的常见错误消息的步骤   与G Suite集成或使用SAML-based Single Sign-On (SSO)时   Google是服务提供商(SP)。