google-app-engine - 如何将自定义信息从 App Engine 身份验证器传递到端点?

标签 google-app-engine authentication google-oauth google-cloud-endpoints facebook-authentication

我在这篇文章中引用了@MinWan 的精彩回答 Google Cloud Endpoints and user's authentication ,他在其中描述了一种将自定义 header 添加到针对 App Engine 的 Cloud Endpoints 的请求的方法。

很明显,我们可以添加一个自定义 header ,并为每个我们要对其进行身份验证的服务(例如 Google、Twitter、Facebook)编写一个身份验证器,其中每个身份验证器读取一个特定的 header 并针对该服务进行身份验证。如果 token 有效,服务通常会返回带有电子邮件地址或用户 ID 的响应,以及一些额外信息 [A],我们从中生成 com.google.api.server.spi.auth.common.User,它稍后作为 com.google.appengine.api.users.User 传递到端点方法。

第一个问题:为什么我们有两个不同的用户实体,例如具有不同命名空间的用户?看起来,这些既不是子类/父类(super class),因此它们可能是在幕后显式转换的。

第二个问题:显式转换用户实体以及没有自定义字段可以放置服务返回的额外信息 [A] 的问题是额外信息丢失了。此类额外信息可能有助于将外部服务的 oauth2 用户与本地用户或其他服务返回的 oauth2 用户进行匹配。

有任何输入吗?处理多重身份验证服务的建议方法是什么?

最佳答案

刚刚测试过,您绝对可以将 User 子类化以包含您想要的任何私有(private)字段。只需使用类继承多态性从 Authenticator 方法返回该类型的对象,而无需更改方法签名中默认 User 的类型。

import javax.servlet.http.HttpServletRequest;
import com.google.api.server.spi.auth.common.User;
import com.google.api.server.spi.config.Authenticator;

public class BazUser extends User {
        private String secret; // extra piece of data held by this User
        public BazUser(String email) {
                super(email);
                this.secret = "notasecret";
        }
        public BazUser (String email, String secret) {
                super (email);
                this.secret = secret;
        }
}

public class BazAuthenticator implements Authenticator {
        public User authenticate(HttpServletRequest req) {
                return new BazUser ("userid@baz.com", "secret");
        }
}

关于google-app-engine - 如何将自定义信息从 App Engine 身份验证器传递到端点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28445840/

相关文章:

python - Gmail OAuth API 无法读取 client_secret.json

oauth - ASP.NET MVC4 谷歌 oAuth

google-app-engine - 如何链接/连接 Firebase 和 Google App Engine 以调整图像大小

google-app-engine - 从 Google Cloud 函数访问 Google Drive API

html - 如何确保用户名和密码是否与特定值匹配,登录按钮重定向到 index.html

c# - C#中的两种不同的窗体

php - 如何使用我的凭据或特殊生成的 ID 和密码在 google api 中进行身份验证?

python - Google App Engine NDB 中的层次结构

java - 将 JAR 添加到 eclipse 项目

authentication - 如何使用 RxDB 处理 JWT 身份验证?