Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 使用谷歌应用程序单点登录+;应用程序引擎_Google App Engine_Openid_Google Apps_Single Sign On - Fatal编程技术网

Google app engine 使用谷歌应用程序单点登录+;应用程序引擎

Google app engine 使用谷歌应用程序单点登录+;应用程序引擎,google-app-engine,openid,google-apps,single-sign-on,Google App Engine,Openid,Google Apps,Single Sign On,是否可以在App Engine上使用内置的OpenId实现SSO?我一直在尝试集成一个Marketplace应用程序,让用户从Google应用程序(管理面板或通用导航)登录。我失败得很惨,现在我发现: “这方面的一个例外是使用混合OpenID/OAuth的应用程序-白名单目前不适用于这种方法。” 我假设我必须使用一个库来实现OpenId,而不是使用内置库来实现我的应用程序中的Google应用程序的SSO?或者,如果可以使用内置的OpenId,是否有一个例子可以说明如何做到这一点?呃,我还没有完全

是否可以在App Engine上使用内置的OpenId实现SSO?我一直在尝试集成一个Marketplace应用程序,让用户从Google应用程序(管理面板或通用导航)登录。我失败得很惨,现在我发现:

“这方面的一个例外是使用混合OpenID/OAuth的应用程序-白名单目前不适用于这种方法。”


我假设我必须使用一个库来实现OpenId,而不是使用内置库来实现我的应用程序中的Google应用程序的SSO?或者,如果可以使用内置的OpenId,是否有一个例子可以说明如何做到这一点?

呃,我还没有完全了解这一功能,但我确实在GAE应用程序中使用了JanRain Engage(Stackoverflow使用的)。我认为openid4java也可以完成这项工作。

您没有指定使用哪种语言。如果是java,则有用于openid+oauth的google库

你已经知道了吗


后来谷歌发布了一篇关于如何在Python中实现这一点的文章:

总结如下:

  • 您必须在MarketplaceManifest XML中列出您的“OpenID领域”(应用程序域)
  • 用于谷歌通用导航的入口点必须包含当前谷歌应用程序域
  • 应用程序中的入口点将通过Google应用程序域的用户重定向为
    federated\u identity
例如:

from google.appengine.api import users

# [...]

login_url = users.create_login_url(dest_url='http://my-app.appspot.com/',
                                   _auth_domain=None,
                                   federated_identity=google_apps_domain_name)
self.redirect(login_url)

这在Java中对我很有用:

Set<String> attributesRequest = new HashSet<String>();
String loginRealm = "http://myapp.appspot.com"; //Important that it is exactly the same as in application-manifest.xml, watch out for trailing slashes.
String destinationURL = req.getRequestURI() + "?" + req.getQueryString();
String federatedIdentity = null;
String authDomain = req.getParameter("hd"); //hd is the default parameter name. Contains the google apps domain name of the user logging on. example.com for example.
String loginUrl = userService.createLoginURL(destinationURL, federatedIdentity, authDomain, attributesRequest);     
Set attributesRequest=new HashSet();
字符串loginRealm=”http://myapp.appspot.com"; //重要的是,它与application-manifest.xml中的完全相同,请注意后面的斜杠。
字符串destinationURL=req.getRequestURI()+“?”+req.getQueryString();
字符串federatedIdentity=null;
字符串authDomain=req.getParameter(“hd”)//hd是默认参数名。包含登录用户的google apps域名。例如example.com。
String loginUrl=userService.createLoginURL(destinationURL、federatedIdentity、authDomain、AttributeRequest);
确保包括

<Edition id="free">
    <Name>Cloud App Studio</Name>
    <Extension ref="navLink" />
    <Extension ref="realm" />
</Edition>

云应用工作室

在application-manifest.xml中。也就是说,如果它是免费的。重要的一点是包含对领域的引用。

您没有明确说明您是否确认您正在集成的marketplace应用程序是混合OpenID/OAuth还是哪个marketplace应用程序。谢谢Paul,这非常有效!其他人注意:将其放入servlet中,映射到此处提到的所需的/_ah/login_:
<Edition id="free">
    <Name>Cloud App Studio</Name>
    <Extension ref="navLink" />
    <Extension ref="realm" />
</Edition>