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