/* * Copyright 2016 Red Hat, Inc. and/or its affiliates * and other contributors as indicated by the @author tags. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.keycloak.social.google; import org.jboss.resteasy.spi.ResteasyProviderFactory; import org.keycloak.broker.oidc.OIDCIdentityProvider; import org.keycloak.broker.oidc.OIDCIdentityProviderConfig; import org.keycloak.broker.social.SocialIdentityProvider; import org.keycloak.common.ClientConnection; import org.keycloak.common.util.KeycloakUriBuilder; import org.keycloak.models.KeycloakSession; /** * @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a> */ public class GoogleIdentityProvider extends OIDCIdentityProvider implements SocialIdentityProvider<OIDCIdentityProviderConfig> { public static final String AUTH_URL = "https://accounts.google.com/o/oauth2/auth"; public static final String TOKEN_URL = "https://www.googleapis.com/oauth2/v3/token"; public static final String PROFILE_URL = "https://www.googleapis.com/plus/v1/people/me/openIdConnect"; public static final String DEFAULT_SCOPE = "openid profile email"; public GoogleIdentityProvider(KeycloakSession session, GoogleIdentityProviderConfig config) { super(session, config); config.setAuthorizationUrl(AUTH_URL); config.setTokenUrl(TOKEN_URL); config.setUserInfoUrl(PROFILE_URL); } @Override protected String getDefaultScopes() { return DEFAULT_SCOPE; } @Override protected String getUserInfoUrl() { String uri = super.getUserInfoUrl(); if (((GoogleIdentityProviderConfig)getConfig()).isUserIp()) { ClientConnection connection = ResteasyProviderFactory.getContextData(ClientConnection.class); if (connection != null) { uri = KeycloakUriBuilder.fromUri(super.getUserInfoUrl()).queryParam("userIp", connection.getRemoteAddr()).build().toString(); } } logger.debugv("GOOGLE userInfoUrl: {0}", uri); return uri; } }