Google Auth не возвращает согласованный идентификатор с IdentityServer4

Я пытаюсь настроить IdentityServer4, используя Пример 8_EntityFramework в качестве базы.

Проблема - Google auth, похоже, не возвращает согласованный идентификатор, который я могу связать со своим приложением.

Глядя на этот сообщение StackOverflow, один пользователь утверждает из документации, что "Сид" сделает это. Однако, если я перезапущу сервер и очистю кеш, SID вернется другим (см. ниже), поэтому не думайте, что он заслуживает доверия.

Следуя другому ходу мыслей, я попытался установить для UserInformationEndpoint значение 'https://www.googleapis.com/oauth2/v1/userinfo', но это полностью не работает.

Вот мой код для запуска сервера аутентификации. .cs" rel="nofollow noreferrer">пример.

public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();

var connectionString = @"server={myserver};database=IdentityServer4.QuickStart;trusted_connection=yes";
var migrationsAssembly = typeof(Startup).GetTypeInfo().Assembly.GetName().Name;



// configure identity server with in-memory users, but EF stores for clients and scopes
services.AddIdentityServer()
    .AddSigningCredential(new X509Certificate2(@"{pathtocertificate}\{certname}.pfx", "{password}"))
    //.AddTemporarySigningCredential()
    .AddInMemoryUsers(Config.GetUsers())
    .AddConfigurationStore(builder =>
        builder.UseSqlServer(connectionString, options =>
            options.MigrationsAssembly(migrationsAssembly)))
    .AddOperationalStore(builder =>
        builder.UseSqlServer(connectionString, options =>
            options.MigrationsAssembly(migrationsAssembly)));

}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
// this will do the initial DB population
InitializeDatabase(app);

loggerFactory.AddConsole(LogLevel.Debug);
app.UseDeveloperExceptionPage();

app.UseIdentityServer();

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme,

    AutomaticAuthenticate = false,
    AutomaticChallenge = false
});

app.UseGoogleAuthentication(new GoogleOptions
{
    AuthenticationScheme = "Google",
    DisplayName = "Google",
    SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme,
    Scope = { "openid", "email" },



    ClientId = "434483408261-55tc8n0cs4ff1fe21ea8df2o443v2iuc.apps.googleusercontent.com",
    ClientSecret = "3gcoTrEDPPJ0ukn_aYYT6PWo"
});

app.UseStaticFiles();
app.UseMvcWithDefaultRoute();

}

Google Аутентификация Результат 1

введите здесь описание изображения

Очистить кеш и перезапустить IdentityServer4 - меняются ВСЕ ключи!

введите здесь описание изображения

Кто-нибудь знает, какой хук я могу использовать для сопоставления с моими серверами ресурсов (т.е. идентификатор Google abc всегда = мой пользователь xyz), пожалуйста?


person HockeyJ    schedule 20.12.2016    source источник


Ответы (1)


После обсуждения на форуме Gitter IdentityServer4 кажется, что проблема связана с примером 8, использующим in-memory пользовательский магазин.

Я думал, что поскольку аутентификация была внешней, а некоторая информация хранится в базе данных, это хранилище в памяти не имеет значения, но это было не так.

Пример 6 с AspNetIdentity правильно соединяет все и возвращает согласованные идентификаторы .

person HockeyJ    schedule 21.12.2016