0

Я пробовал при создании IdentityServer4, используя Example 8_EntityFramework в качестве базы.Google Auth не возвращает согласованный идентификатор с IdentityServer4

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

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

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

Вот мой код для сервера auth startup.js - Это в значительной степени стандарт в example.

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 Auth Результат 1

enter image description here

Очистить кэш и перезагрузить IdentityServer4 - все ключи меняются!

enter image description here

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

ответ

1

После обсуждения вопроса Gitter IdentityServer4 forum проблема связана с примером 8 с использованием хранилища данных в памяти.

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

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

Смежные вопросы