私は既存のmvc core 2.0 Webアプリケーションで使用するOpenIdDict authserverを設定しています。私はコードフローを使用しており、本番アプリケーションでOpenIdConnectの部分を実装する前にテスト用のmvc webappリソースサーバーを作成しています。OpenIddict MVCコア2.0とリソースサーバーAPIのJWT
すべてが意図したとおりに動作しているようで、ログインしてリソースにアクセスできます。
私は休憩クライアントの新しい認証アーキテクチャの下で動作するAPIベアラ認証を取得する必要があります。 Apiは同じリソースサーバーに配置されます。
私が使ってJWTのための私のOpenIddictを設定している:
options.AllowPasswordFlow();
options.UseJsonWebTokens();
options.AddSigningKey(new SymmetricSecurityKey(Encoding.ASCII.GetBytes(Configuration.GetSection("TokenAuthentication:SecretKey").Value)));
は...
JwtBearer
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
JwtSecurityTokenHandler.DefaultOutboundClaimTypeMap.Clear();
services.AddAuthentication()
.AddJwtBearer(options =>
{
options.Authority = "http://localhost:17004/";
options.Audience = "MyAudience";
options.RequireHttpsMetadata = false;
options.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = OpenIdConnectConstants.Claims.Subject,
RoleClaimType = OpenIdConnectConstants.Claims.Role,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(Configuration.GetSection("TokenAuthentication:SecretKey").Value))
};
});
追加...とパスワードの流れトークンのリクエストを処理するためAuthorizationController.Exchangeにコードを追加しました。
私のリソースサーバーStartup.cs上でAddOpenIdConnectを追加し、signingKey(認証サーバーと同じキー)を追加しました。私のリソースサーバがまだ認証を行うことができ、これを設定すると、すべてが働いていると私は私の認証サーバからJWTトークンを取得するためにrestclientを使用することができますが、リソースサーバー上の私のAPIにアクセスしようとすると、それが原因でそこに失敗した後
options.ResponseType = OpenIdConnectResponseType.Code;
options.AuthenticationMethod = OpenIdConnectRedirectBehavior.RedirectGet;
options.TokenValidationParameters = new TokenValidationParameters()
{
IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(Configuration.GetSection("TokenAuthentication:SecretKey").Value))
};
options.Authority = "http://localhost:17004/";
ベアラ方式のバリデータはありません。
TokenValidationParametersに同じsigningKeyを持つリソースサーバーでAddBearerTokenを呼び出すための呼び出しを追加すると、実際に動作します。挑戦は成功し、私は自分のリソースにアクセスできます。
私は私のapiを呼び出すとき、私のトークンの検証は、リソースサーバー上で起こっているので、私は2つの質問が残っていることがわかるので、私のセットアップは矛盾していると思う。
JwtBearerミドルウェアが認証サーバーに認証を転送することは可能ですか? (openidConnectで処理できますか?)
リソースサーバーの転送/パススルートークンの発行リクエストも自分の認証サーバーにすることは可能ですか?残りのAPIクライアントは2台のサーバーを処理する必要はありませんか?
OpenIddict認証サーバーに証明書を追加した後、jwksが動作し、リソースサーバー側からキーを取得でき、リソースサーバー上で検証が行われることを理解しています(恐れているsigningkeysの複数の登録でした)。しかし、私のRESTクライアントアプリは、最初のトークン発行のために認証サーバーに直接連絡する必要があります。私は自分のリソースサーバーを介してそれを行うことができますか? –
...私の場合は、私のリソースサーバーでOpenIdConnectを使用すべきではないと述べました。 JwtBearerだけを使ってリソースサーバを設定する方法の例を挙げてください。 (openidconnectを削除すると、openidconnectスキームのハンドラが存在しないので、auth.controllerのチャレンジは失敗します。スキーマを「Bearer」に変更すると、認証サーバには連絡せず、401だけを返します) –
私は小さなディスカバリメソッドを作成しました。私のRESTクライアントに権限を見つける場所を伝え、認証サーバーで.well-known/openid-configurationを使用してトークンエンドポイントを見つけます。 –