问题:尝试在移动应用之间创建SSO。和浏览器。
我们拥有什么:
我们有一个离子移动应用程序。用"用Google登录"使用OAuth 2.0身份验证。我们有多个内部应用程序可以在OAuth2和SAML上运行,因此我们为GSuite启用了SSO,以便所有应用程序可以使用一个登录名和密码无缝地工作。现在,当我们点击"用Google登录"按钮,
在浏览器应用中打开SSO登录页面。我们启用了SSO 因此我们设置了login_hint,这有助于我们直接带我们去 SSO登录页面。
用户输入useremail和密码,然后重定向到 redirect_uri使用OAuth 2代码参数成功进行身份验证。
redirect_uri以触发网址的方式完成, 它再次使用OAuth 2代码param重定向回我们的Android应用程序 然后我们从令牌中提取access_token和useremail userinfo端点。
根据授权,仪表板显示指向我们内部的链接 应用。适用于Google SAML 2.0或OAuth2身份验证。
预期结果:
当用户点击移动应用中的任何SAML / OAuth 2链接时。仪表板,我们在浏览器应用程序中打开该链接。它应该自动登录到该应用程序。并将我们带到目标网页,因为我们已经在步骤#a中设置了Google会话。
偏离预期的事情:
想要了解如何以及何时在Google Chrome手机中自动创建和终止会话?
是否有任何地方保持会话完好无损? |有没有办法再通过显示与电话同步的帐户的帐户选择器?
更新
能够弄清楚奇怪的观察: 我们保留了SSO,以便Google登录屏幕显示出来。有了这一切一切正常。即使重新启动浏览器或手机,无论Android还是iOS,都不会终止会话。
问题在于我们设计的SSO。无法确定我们发布到Google的ACS网址的SAML XML中要设置的内容。
答案 0 :(得分:4)
我认为谷歌浏览器在手机中的行为方式与计算机相同,因此使用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公司
我对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 credentials和manually Delete stored credentials
当需要用户输入来选择凭证时, getStatusCode()方法返回RESOLUTION_REQUIRED。在这种情况下,请致电 状态对象的startResolutionForResult()方法提示 用户选择一个帐户。然后,检索所选用户 来自活动的凭证onActivityResult()方法通过传递 Credential.EXTRA_KEY到getParcelableExtra()方法。
当凭据对象的用户ID与在设备上登录的Google帐户的用户ID相匹配时,Sign In Using ID Tokens可用。
如何implement it以及test和check相关SO答案中的有用方案。
Use Google Sign-In with IT Apps
将应用程序列入白名单,以便您的用户不会看到 他们登录时确认屏幕。这一步,结合了 后续步骤(第4点:将帐户的Google for Work域名传递给auth服务器,因此在登录时只显示该域中的帐户),确保IT应用程序的用户可以 自动登录。将您的应用列入白名单:
- 打开G Suite Admin Console。
- 单击“安全”图标,然后单击“显示更多”>高级设置>管理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流并包含参数离线,则白名单将无效 的提示即可。 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会选择第二个 等)。
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应用。选择 将服务/应用添加到您的域并设置:
Turn on SSO to your new SAML app:
登录您的Admin console。去 应用> SAML应用。
选择应用。在灰色框的顶部,点击更多设置和 中选择:
- 为大家打开所有用户的服务(再次点击确认)。
- 关闭以关闭所有用户的服务(再次单击确认)。
- 某些组织仅针对某些用户更改设置。
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参数。
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 website,Metadata for the OASIS Security Assertion Markup Language (SAML) V2.0。
创建密钥库文件。有关密钥库文件的信息,请参阅 Creating Certificates for SAML Integration
有关keytool实用程序的详细信息,请转到Oracle Documentation website,keytool - Key and Certificate Management Tool。
要将G Suite设置为SAML身份提供商(IdP),您需要输入 每个人的SAML服务提供商URL 您计划设置的预配置云应用程序。
实体的Links 每个预配置云的ID,ACS URL和起始URL值 应用
This document 提供了解决在此期间遇到的常见错误消息的步骤 与G Suite集成或使用SAML-based Single Sign-On (SSO)时 Google是服务提供商(SP)。