2017-03-23 13 views
0

LinkedInを外部ログインとして使用しようとしても、このエラーが発生します。承認画面の後。最初のアプリケーションではなく/callbackになります。IdentityServer3外部ログインとしてLinkedInを使用

あなたがサインインしているアプリケーションを特定する際にエラーが発生しました。 アプリケーションに戻り、もう一度やり直してください。

は、ここで私はどちらかのクライアントを設定する方法が本当にわからないんだけど、私の設定

private void ConfigureIdentityProviders(IAppBuilder app, string signInAsType) 
{ 
    app.UseCookieAuthentication(new CookieAuthenticationOptions 
    { 
     AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,  
    }); 

    app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 
    app.UseLinkedInAuthentication(new LinkedInAuthenticationOptions() 
    { 
     ClientId = "[...]", 
     ClientSecret = "[...]" 
    }); 
} 

です。私は、流れが必要であることを知っている。認証コード。しかし、それを超えて私は失われています。

new Client 
{ 
    ClientId = "[...]", 
    ClientName = "Linkedin Client", 
    Enabled = true, 
    Flow = Flows.AuthorizationCode, 
    RedirectUris = 
     new List<string> {_baseUrl, "http://localhost/mtthelloworld"}, 
    PostLogoutRedirectUris = 
     new List<string> {_baseUrl}, 
    ClientSecrets = new List<Secret>() 
    { 
     new Secret("[???]".Sha256()) 
    }, 
} 

編集ConfigureIdentityServerConfigを追加しました:あなたはLinkedInのからクライアントIDとクライアントシークレットを取得する必要があり、すべての

private void ConfigureIdentityServer(IAppBuilder appBuilder) 
{ 
    var idsFactory = new IdentityServerServiceFactory() 
     .UseInMemoryClients(Clients.Get()) 
     .UseInMemoryScopes(Scopes.Get()); 
    idsFactory.UserService = new Registration<IUserService>(typeof(UserService)); 

    var idsOptions = new IdentityServerOptions() 
    { 
     SiteName = "SSO", 
     SigningCertificate = VcCert.Load("CN=cert.local"), 
     Factory = idsFactory, 
     RequireSsl = false, 
     LoggingOptions = new LoggingOptions() 
     { 
      EnableWebApiDiagnostics = true, 
      EnableHttpLogging = true, 
      EnableKatanaLogging = true, 
      WebApiDiagnosticsIsVerbose = true 
     }, 
     PluginConfiguration = ConfigureWsFederation, 
     AuthenticationOptions = new AuthenticationOptions() 
     { 
      IdentityProviders = ConfigureIdentityProviders 
     } 
    }; 

    appBuilder.Map("/identity", idApp => { idApp.UseIdentityServer(idsOptions); }); 

    appBuilder.UseIdentityServer(idsOptions); 
} 

答えて

1

まず。これは通常、外部プロバイダ側のアプリケーションをLinkedInに登録することによって行われます。 外部プロバイダに認証を委任する場合、サーバーはクライアントであり、LinkedInはサーバーであることに注意してください。

外部プロバイダの設定方法については、CookieAuthenticationMiddlewareにこのメソッドを呼び出さないでください。代わりに、LinkedIn認証ミドルウェアのみを設定します。

private void ConfigureIdentityProviders(IAppBuilder app, string signInAsType) 
{ 
    app.UseLinkedInAuthentication(new LinkedInAuthenticationOptions() 
    { 
     AuthenticationType = "LinkedIn", 
     SignInAsAuthenticationType = signInAsType, 
     ClientId = "[...]", // client id you've obtained from LinkedIn 
     ClientSecret = "[...]", // client secret you've obtained from LinkedIn 
    }); 
} 

あなたは、あなたの2番目のコードスニペットでそれをやっているように、新しいClientを作成する必要はありません。これらのクラスはあなたのアプリケーションのクライアントを対象としています。私が前に言ったように、あなたのアプリケーションはクライアントです。

EDIT

あなたはIdentityServer3をホストするサーバーにCookieAuthenticationMiddlewareを設定する必要はありません - のは、アイデンティティプロバイダこのサーバを呼びましょう。

public void Configuration(IAppBuilder app) 
{ 
    app.UseIdentityServer(new IdentityServerOptions 
    { 
     // ... 
     AuthenticationOptions = new AuthenticationOptions 
     { 
      IdentityProviders = (IAppBuilder builder, string signInAsType) => 
      { 
       builder.UseLinkedInAuthentication(new LinkedInAuthenticationOptions 
       { 
        AuthenticationType = "LinkedIn", 
        SignInAsAuthenticationType = signInAsType, 
        ClientId = "[...]", 
        ClientSecret = "[...]" 
       }; 
      } 
     } 
    }); 
} 

あなたが聞くことができる質問は - よく、次にどこで使う必要がありますか?答えは簡単です - あなたのアイデンティティプロバイダに承認を委任するクライアントでそれを使用してください。

public void Configuration(IAppBuilder app) 
{ 
    app.UseCookieAuthentication(new CookieAuthenticationOptions 
    { 
     AuthenticationType = "Cookies" 
    }); 

    app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions 
    { 
     SignInAsAuthenticationType = "Cookies", 
     // ... 
    }); 
} 
+0

私は2行のコードを削除しましたが、この設定エラーが発生しました。「SignInAsAuthenticationTypeのデフォルト値がIAppBuilderのプロパティに見つかりませんでした。これは、認証ミドルウェアが間違った順序で追加された場合、または1つが不足している場合に発生します。 – martinni39

+0

あなたは正しいです!私は 'SignInAsAuthenticationType = signInAsType 'が不足していることに気付きました。 – martinni39

関連する問題