IdentityServer4学習(1)

1.クライアント資格情報インスタンス

①準備

テンプレートをインストールするには、コンソールウィンドウを開き、次のコマンドを入力します。

dotnet new -i IdentityServer4.Templates

インストール後、identityserverテンプレートは非常に少なくなります

 

 

 インメモリストアとテストユーザーテンプレートを選択して、情報をメモリに配置します

②インメモリストアとテストユーザーテンプレートプロジェクトを作成

DOTNET 新しい is4inmem名- myServiceという

いくつかのクライアントカテゴリが構成ファイルに生成されます。この場合は、

 

 次に、サービス開始ポートを5000に設定します

③クライアントを作成する

アクセストークンを要求するクライアントを記述し、コンソールアプリケーションを作成して、起動ポートを5002に設定する

IdentityModelパッケージを追加する

メタデータから実際のエンドポイントアドレスを読み取る

// メタデータからエンドポイントを検出します
var client = new HttpClient();
var disco = await client.GetDiscoveryDocumentAsync(" http:// localhost:5000 " );
if (disco.IsError)
{ 
    Console.WriteLine(disco.Error); 
    戻る; 
}

次に、発見ドキュメントの情報を使用して、IdentityServerにアクセスするためのトークンをリクエストできます。api1

// リクエストトークン
var tokenResponse = await client.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest 
{ 
    Address = disco.TokenEndpoint、

    ClientId = " client " 
    ClientSecret = " secret " 
    Scope = " api1 " 
}); 

if (tokenResponse.IsError)
{ 
    Console.WriteLine(tokenResponse.Error); 
    戻る; 
} 

Console.WriteLine(tokenResponse.Json);

APIへのアクセストークンの送信、APIへのアクセス

// api 
var apiClient = new HttpClient();を

呼び出します 
apiClient.SetBearerToken(tokenResponse.AccessToken); var response = await apiClient.GetAsync(" http:// localhost:5001 / identity " );
if(!response.IsSuccessStatusCode)
{ 
    Console.WriteLine(response.StatusCode); 
} 
else 
{ 
    var content = await response.Content.ReadAsStringAsync(); 
    Console.WriteLine(JArray.Parse(content)); 
}

④APIリソースの定義

APIプロジェクトを作成し、起動ポートを5001に設定します

という名前の新しいクラスを追加しますIdentityController

[ルート(" アイデンティティ" )] 
[承認] 
パブリック クラスIdentityController:ControllerBase 
{ 
    [HTTPGET] 
    パブリックIActionResultのGet()
    { 
        戻り 新しい化するJsonResultを(から C  User.Claims 選択 新しい{c.Type、c.Valueを})。
    } 
}

次に、コントローラにアクセス許可[Authorize]を追加します

最後のステップは、認証サービスをDI(依存性注入)に追加し、認証ミドルウェアをパイプラインに追加することです。これらは:

  • 受信トークンを検証して、信頼できる発行者からのものであることを確認します
  • トークンがこのAPI(オーディエンスとも呼ばれます)で使用できることを確認してください
public  class Startup 
{ 
    public  void ConfigureServices(IServiceCollection services)
    { 
        services.AddControllers(); 

        services.AddAuthentication(" Bearer " ). 
            AddJwtBearer(" Bearer "、options => 
            { 
                options.Authority = " http:// localhost:5000 " ; 
                options.RequireHttpsMetadata = false ; 

                options.Audience = " api1 " ;
            }); 
    } 

    public  void Configure(IApplicationBuilder app)
    { 
        app.UseRouting(); 

        app.UseAuthentication(); 
        app.UseAuthorization(); 

        app.UseEndpoints(endpoints => 
        { 
            endpoints.MapControllers(); 
        }); 
    } 
}
  • AddAuthentication認証サービスをDIに追加し、デフォルトのスキームとして構成しBearerます。
  • UseAuthentication ホストへのすべての呼び出しが自動的に認証を実行するように、認証ミドルウェアをパイプラインに追加します。
  • UseAuthorization 匿名クライアントがAPIエンドポイントにアクセスできないようにするために、承認ミドルウェアが追加されました。

http://localhost:5001/identityブラウザのコントローラに移動すると、401ステータスコードが返されます。つまり、APIは資格情報を必要とし、IdentityServerによって保護されます。

参照:https : //identityserver4.readthedocs.io/en/latest/quickstarts/1_client_credentials.html

おすすめ

転載: www.cnblogs.com/liguix/p/12727458.html
おすすめ