Googleのクライアントサイドアプリは、以前はGoogle Sign-Inを使用していました。カスタム認証ツールを使用しているときにAppEngineエンドポイントのクライアントIDを検証する
Googleアカウントの代わりにユーザーの電話番号を唯一のIDとして使用する予定であるため、カスタム認証に移行します。しかし、カスタムオーセンティケータを実装した後、クライアントIDはチェックされず、どこからでもAPIコールを行うことができます。
クライアント側でGoogleログインのみが使用されていた場合、クライアントIDが検証されていて、認証されていないクライアントからAPI呼び出しを行うことができませんでした。
カスタムオーセンティケータの使用中にクライアントIDを確認するにはどうすればよいですか?
カスタム認証用
@Api(name = "apiSubscriber",
clientIds = {
Constants.webClientId,
Constants.androidClientId,
Constants.iOSClientId
},
authenticators = {com.google.api.server.spi.auth.EndpointsAuthenticator.class,
CustomAuth.class},
audiences = {Constants.androidAudience},
)
public class ApiSubscriber {
@ApiMethod
public Subscriber getSubscriberData(User user){
if(user!=null){
//fetches subscriber data
}
}
//... Other ApiMethods
}
コード
public class CustomAuth implements Authenticator {
@Override
public User authenticate(HttpServletRequest request) {
String phoneNumber = request.getHeader("phoneNumber");
String token = request.getHeader("Authorization");
if(checkToken(phoneNumber,token)){
return new User(phoneNumber);
}
return null;
}
private boolean checkToken(String phoneNumber, String token){
//Checks if authorization token is valid
}
}
認証メソッドをデバッグしましたか?それは呼ばれていますか? – yurin
@yurinはい、authenticateメソッドが呼び出され、期待どおりに動作します。どのクライアントからでも動作しますが、指定されたクライアントからのAPI呼び出しのみを許可します。 – KrisPrajapati