この例では、ユーザーが (MVC 5) Web アプリケーションにログインし、プロキシとして機能して (Web API 2) API (Basic over SSL を使用) にログインし、ベアラー/アクセス トークンを返します。私は Thinktecture.IdentityModel.Client.OAuth2Client を使用してログインを処理し、アクセス トークンを取得していますが、これはすべて正常に機能します。
他にもいくつかのことが起こりますが、Web アプリケーションがアクセス トークンをデコードして、API に設定されたクレーム (具体的には、API へのログイン後に返されるユーザー ID) にアクセスできるようにしたいと考えています。
私は多くのデモを使用しており、トークンエンドポイントを使用して拡張メソッドを使用していますが、独自のリポジトリにアクセスするためのカスタムがありUseOAuthAuthorizationServer
ます。UseOAuthBearerAuthentication
OAuthAuthorizationServerOptions.Provider
両方のアプリケーションで同じ MachineKey を使用していますが、トークンをデコードする方法が不明ですが、おそらくSecureDataFormat.Unprotect
メソッドを使用する必要があることは理解しています。
私が Web アプリケーションで行った最も近い試みは次のとおりです。
Task<TokenResponse> response = client.RequestResourceOwnerPasswordAsync(model.Email, model.Password);
IDataProtector dataProtecter = Startup.DataProtectionProvider.Create("does this matter?");
TicketDataFormat ticketDataFormat = new TicketDataFormat(dataProtecter);
AuthenticationTicket ticket = ticketDataFormat.Unprotect(response.Result.AccessToken);
Startup.DataProtectionProvider を次のように設定します。
public partial class Startup
{
internal static IDataProtectionProvider DataProtectionProvider { get; private set; }
public void Configuration(IAppBuilder app)
{
DataProtectionProvider = app.GetDataProtectionProvider();
this.ConfigureAuth(app);
}
}
私のフォールバック計画は、ログイン後に興味のある情報を返す API メソッドを提供することですが、それがトークンのクレームの一部を形成するため (私が理解しているように)、過剰に見えます。
私は JWT について頭を悩ませようとしました (Thinktecture、Microsoft のソース コード、およびその他のさまざまなフォーラムを見てきました) が、それが役立つかどうかはわかりません (ただし、プレーン テキストで利用できる主張は役に立ちます)。基本認証でのサインインを許可し、アクセス トークンを含むカスタム JWT を返す例をまだ見つけていません。
とにかく、それが十分な情報であることを願っています。どんな助けでも大歓迎です...乾杯