gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:19:04 26 4
gpt4 key购买 nike

我在这篇文章中引用了@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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com