Google App Engine的多域认证选项
我在寻找一些建议,想在我们的GAE应用中实现身份验证(和授权)。假设我们的应用叫someapp,我们的需求如下:
someapp主要是为安装在特定域名上的谷歌应用用户服务,但也可以验证来自其他谷歌应用域名的用户。
举个例子,假设谷歌应用在domainX.com和domainY.com上配置好了。此外,domainX.com的管理员已经从应用市场将someapp添加到他们的域名中。domainX.com的管理员邀请userA@domainX.com和userB@domainY.com登录这个应用。两个谷歌应用域名的用户都应该能够使用他们的单点登录(SSO)功能。
根据我们所知,目前应用引擎的身份验证选项要么是域名登录,这样只有一个域名的用户可以登录应用,要么是联合/开放ID登录,这样任何域名的用户都可以登录应用。没有中间选项可以让只有之前授权的域名用户登录应用。这是否意味着我们唯一的选择是放弃谷歌应用的身份验证,自己实现一个定制的身份验证?
另外,在我们上面的示例场景中,如果domainX.com和domainY.com都添加了someapp。那么如果userA@domainX.com访问someapp.appspot.com,将使用哪个版本的应用,是安装在domainX.com上的那个,还是安装在domainY.com上的那个?
1 个回答
身份验证并不意味着授权。联邦身份系统为你的应用提供的只是一个你可以信任的用户名或用户ID。这意味着你可以根据这些信息设置用户账户,并且可以相信每次看到这个用户ID时,你都是在和同一个用户交流。对于一些跨域的应用来说,只要看到用户ID中有那个域名,就可以知道这个用户是属于那个域的。
是否这个用户ID在你的应用中有意义,完全取决于你的应用。如果我现在用我的谷歌账户登录你的应用,系统应该说:“哦,我以前没见过你,你想加入吗?”... 这就意味着(根据你的应用)系统不应该仅仅因为我告诉了你我的名字,就假设我有权使用你的应用。
我不太明白你提到的“域登录模型”是从哪里来的?实际上只有两个选择:谷歌账户和开放/联邦ID,这两者都没有试图限制用户的访问权限。
在你最后的例子中,使用多个谷歌账户的用户会看到不同的结果,这取决于他们是否启用了多重登录。大多数用户在继续之前会看到一个选择屏幕,让他们选择要使用哪个谷歌账户。