我正在将Google+登录与我的网站集成,这也允许用户使用Twitter和Facebook登录.因此,该站点的登录页面有3个按钮,每个按钮对应一个服务.
我遇到的问题是在以下场景中:
问题是,在重新访问登录页面时,我希望用户可以选择使用其他服务登录,而不是使用G +自动登录.如果用户想要使用G +登录,则可以通过单击按钮进行登录 - 然后用户将自动登录.
是否可以阻止此按钮渲染自动登录?我可以通过data-approvalprompt="force"在按钮上使用as属性来模拟它,但我不认为这是一个理想的解决方案(然后用户必须通过确认过程,我理想的是希望阻止)
问题:尝试在移动应用之间创建SSO.和浏览器.
我们有什么:
我们有一个离子移动应用程序.使用OAuth 2.0身份验证"使用Google登录".我们有多个内部应用程序可以在OAuth2和SAML上运行,因此我们为GSuite启用了SSO,以便所有应用程序可以使用一个登录名和密码无缝地工作.现在,当我们点击"使用Google登录"按钮时,
在浏览器应用中打开SSO登录页面.我们启用了SSO,因此我们设置了login_hint,这有助于我们直接将我们带到SSO登录页面.
用户输入useremail和password,并在使用OAuth 2代码参数成功进行身份验证后重定向到redirect_uri.
redirect_uri是以一种方式完成的,当url被触发时,它会再次使用OAuth 2代码param重定向回我们的Android应用程序,然后我们从token和userinfo端点提取access_token和useremail.
根据授权,仪表板显示指向我们内部应用程序的链接.适用于Google SAML 2.0或OAuth2身份验证.
预期结果:
当用户点击移动应用中的任何SAML/OAuth 2链接时.仪表板,我们在浏览器应用程序中打开该链接.它应该自动登录到该应用程序.并将我们带到目标网页,因为我们已经在步骤#a中设置了Google会话.
偏离预期的事情:
想要了解如何以及何时在手机中的谷歌浏览器中自动创建和杀死会话?
有什么地方保持会话完整吗?|有没有办法再通过显示与手机同步的帐户的帐户选择器?
更新
能够找出奇怪的观察结果:我们保持SSO关闭,以便谷歌登录屏幕出现.有了这一切一切正常.即使重新启动浏览器或手机,无论Android还是iOS,都不会终止会话.
所以问题在于我们设计的SSO.无法确定我们发布到Google的ACS网址的SAML XML中要设置的内容.
我的应用程序中有以下工作流程:
此时,发生以下两种情况之一:
[我从不想要这种行为] - 如果用户只登录了一个Google帐户(例如gmail,Google Apps for Domains等等),则系统永远不会要求用户选择要关联的帐户.它只是假设他们想要使用他们登录的那个并继续它的快乐方式.
[我一直想要这种行为] - 如果用户未登录任何Google帐户,或者他们登录了多个Google帐户,则系统会要求他们选择要继续使用的帐户.
问题:即使用户当前登录到单个Google帐户,我还有办法强制用户选择帐户吗?
码:
private def getFlow() = {
if (flow == null) {
logger.info("Using OAuth client secrets file: " + GoogleOAuthService.CLIENT_SECRETS_JSON)
clientSecrets = GoogleClientSecrets.load(JacksonFactory.getDefaultInstance(),
new InputStreamReader(getClass.getResourceAsStream(GoogleOAuthService.CLIENT_SECRETS_JSON)));
redirectUri = clientSecrets.getDetails().getRedirectUris().get(0)
flow = new GoogleAuthorizationCodeFlow.Builder(
httpTransport, JacksonFactory.getDefaultInstance(), clientSecrets, SCOPES).setDataStoreFactory(
dataStoreFactory).setAccessType("offline").setApprovalPrompt("force").build()
}
flow
}
def newAuthorizationUrl(userId: String) = {
val urlRequest = getFlow().newAuthorizationUrl()
urlRequest.setAccessType("offline")
.setRedirectUri(redirectUri).setState(userId).build()
}
Run Code Online (Sandbox Code Playgroud) 使用Firebase Google用户身份验证时,如果用户已经授权应用程序并且仅登录到一个Google帐户,则会立即登录.
有没有办法强制显示"选择帐户"对话框,以便用户有机会登录其他Google帐户或创建新帐户?
货币据我所知,用户必须从Google.com手动注销当前的Google帐户(或登录> 1)才能显示对话框.
我可以单独使用prompt=consent和prompt=select_account单独使用,但Google似乎不允许我将它们组合使用.我尝试了强制谷歌帐户选择器prompt=consent+select_account的答案中的建议,但失败了错误:"无效提示:同意+ select_account".
该文档(https://developers.google.com/accounts/docs/OAuth2Login)显示"以空格分隔的列表",因此我尝试consent select_account但失败的原因是:"在此服务器上找不到请求的网址."
我也试过结合prompt=select_account和approval_prompt=force,但谷歌不喜欢,要么.
其他人在结合同意屏幕和帐户选择器方面运气好吗?
更新:
这是我的JavaScript方法,用于创建从gmail获取联系人的URL
$scope.importGmailContacts = function() {
provider = 'gmail';
$scope.importing_from_gmail = true;
window.open(protocol + "://" + host + ":" + port + "/contacts/gmail", "_blank",
"toolbar=yes, scrollbars=yes, resizable=yes, top=0, left=0, width=600, height=600, prompt='select_account+consent', approval_prompt=force");
}
Run Code Online (Sandbox Code Playgroud)
我尝试过设置prompt,approval_prompt无论是集体还是单独设置,但似乎无法正常工作.请参阅此问题.
在实施Google登录网站时,可以设置“ select_account”提示,以便用户选择其他Google帐户。(强制使用Google帐户选择器)
Facebook提供类似的东西吗?如果他们找到了,我似乎找不到。我遇到的问题是,如果用户选择“保持登录状态”,他们将永远无法切换并使用其他Facebook帐户登录,而无需先登录Facebook并先注销。