2017-01-25 21 views
3

アイデンティティ・サーバー4を使用してWeb APIを使用しています。統合テストの作成場所を知りません。私は、ResourceOwnerPasswordグラントタイプに使用されるユーザー名とパスワードを取っているログインコントローラを持っています。以下は私のコードです。asp.net mvcコアにアイデンティティ・サーバー4の統合テストを書く方法

コントローラ。

[Route("Authentication/Login")] 
public async Task<IActionResult> WebApiLogin(string username, string password) 
{ 
    var accessToken = await UserAccessToken.GenerateToken(username, password); 
    return new JsonResult(accessToken); 
} 

クラストークン

public async Task<string> GenerateToken(string username, string password) 
{ 
    //discover endpoint for metadata 
    var disco = await DiscoveryClient.GetAsync("http://localhost:5000"); 

    //request token 
    var clientToken = new TokenClient(disco.TokenEndpoint, "client", "secret"); 
    //var tokenResponse = await clientToken.RequestClientCredentialsAsync("Payment"); 
    var tokenResponse = await clientToken.RequestResourceOwnerPasswordAsync(username, password, "IntegrapayAPI"); 

    if (tokenResponse.IsError) 
    { 
     //Error tokenResponse.Error 
     return tokenResponse.Error; 
    } 
    return tokenResponse.Json.ToString(); 
} 

IdentityServerプロジェクト起動クラスを生成します。

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddIdentityServer() 
     .AddTemporarySigningCredential() 
     .AddInMemoryApiResources(Config.GetApiResources()) 
     .AddInMemoryClients(Config.GetClients()); 
    //.AddTestUsers(Config.GetUsers()); 

    services.AddTransient<IResourceOwnerPasswordValidator, ResourceOwnerPasswordValidator>(); 

    // Add framework services. 
    //services.AddMvc(); 
} 

答えて

4

あなたはこの答えを見てみることができます:https://stackoverflow.com/a/39409789/147041 免責事項:自分の質問、私の答えを。 統合テストがAPIに対して設定されているGitHubリポジトリへのリンクが含まれていますが、MVCでも同様に動作します。本質は、メモリ内のIdentityServerをトークンジェネレータとバリデータとして使用することです。

さらに、APIとIdentityServerを混在させないでください。 IdentityServerを使用してトークンを生成すると、APIはそれらのトークンをIDサーバの検証を行います。

多くのあなたが始めるために良いsamplesがあります。

関連する問題