我正在使用带有Java的Google Cloud Endpoints,我想为我的用户创建一个登录系统。我想要做的很简单:我只是希望他们在使用电子邮件和密码登录后保持会话。
然而,使用Cloud Endpoints似乎非常困难。我的用户似乎必须拥有一个Google帐户,我认为这是一个非常重要的限制,并且这是不可接受的。我看到了一些像这样的帖子:Google Cloud Endpoints limitations... any proposed solutions?但它没有回答我的问题。
有一种简单的方法吗?
答案 0 :(得分:2)
在没有Google用户帐户的情况下验证Android端点是不可能的!我尝试了各种方法,但仍然无法运作..
所以这是我解决这个问题的方法,没有任何用户交互(也许不是正确的但是有效,而且你有强大的身份验证(SHA1 + Google帐户)):
这是我的安卓代码
获取并构建有效凭据
//Get all accounts from my Android Phone
String validGoogleAccount = null;
Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8+
Account[] accounts = AccountManager.get(context).getAccounts();
for (Account account : accounts) {
if (emailPattern.matcher(account.name).matches()) {
//Just store mail if countain gmail.com
if (account.name.toString().contains("gmail.com")&&account.type.toString().contains("com.google")){
validGoogleAccount=account.name.toString();
}
}
}
//Build Credential with valid google account
GoogleAccountCredential credential = GoogleAccountCredential.usingAudience(this,"server:client_id:301991144702-5qkqclsogd0b4fnkhrja7hppshrvp4kh.apps.googleusercontent.com");
credential.setSelectedAccountName(validGoogleAccount);
使用此凭据进行安全通话
Campagneendpoint.Builder endpointBuilder = new Campagneendpoint.Builder(AndroidHttp.newCompatibleTransport(), new JacksonFactory(), credential);
这是我的API后备代码: API注释
@Api(
scopes=CONSTANTES.EMAIL_SCOPE,
clientIds = {CONSTANTES.ANDROID_CLIENT_ID,
CONSTANTES.WEB_CLIENT_ID,
com.google.api.server.spi.Constant.API_EXPLORER_CLIENT_ID},
audiences = {CONSTANTES.ANDROID_AUDIENCE},
name = "campagneendpoint",
version = "v1"
)
方法代码:
public Collection<Campagne> getCampagnes(@Named("NumPortable")String NumPortable, User user) throws UnauthorizedException {
if (user == null) throw new UnauthorizedException("User is Not Valid");
return CampagneCRUD.getInstance().findCampagne(NumPortable);
}
目前,它仅适用于Android(我不知道我们将如何处理IOS,而无需重新编码我自己的oauth2 API ..)
希望它会对你有帮助!