Pinpointによる回答とコメントの返信はこちらにあります。ありがとう!
NuGetパッケージから離れてMicrosoft.Owin.Security.OpenIdConnectの変更されたソースコードを実行する場合は、form_postでコード(code
)を取得できます。
もちろん、これはすべてのオープンソースプロジェクトの問題について言えるかもしれませんが、私の場合はこれが大きな問題のための迅速な解決策でしたので、をにすることができます。
https://github.com/aspnet/AspNetKatanaからコードをダウンロードし、ソリューションにcsprojを追加し、AuthenticateCoreAsync()のhttps://github.com/aspnet/AspNetKatana/blob/dev/src/Microsoft.Owin.Security.OpenIdConnect/OpenidConnectAuthenticationHandler.csから行を削除しました。
これをバックチャネルコールと組み合わせて、独自の新しいClaimsIdentity()を作成してnotification.AuthenticationTicketとして設定する必要があります。
// Install-Package IdentityModel to handle the backchannel calls in a nicer fashion
AuthorizationCodeReceived = async notification =>
{
var configuration = await notification.Options.ConfigurationManager
.GetConfigurationAsync(notification.Request.CallCancelled);
var tokenClient = new TokenClient(configuration.TokenEndpoint,
notification.Options.ClientId, notification.Options.ClientSecret,
AuthenticationStyle.PostValues);
var tokenResponse = await tokenClient.RequestAuthorizationCodeAsync(
notification.ProtocolMessage.Code,
"http://localhost:53004/signin-oidc",
cancellationToken: notification.Request.CallCancelled);
if (tokenResponse.IsError
|| string.IsNullOrWhiteSpace(tokenResponse.AccessToken)
|| string.IsNullOrWhiteSpace(tokenResponse.RefreshToken))
{
notification.HandleResponse();
notification.Response.Write("Error retrieving tokens.");
return;
}
var userInfoClient = new UserInfoClient(configuration.UserInfoEndpoint);
var userInfoResponse = await userInfoClient.GetAsync(tokenResponse.AccessToken);
if (userInfoResponse.IsError)
{
notification.HandleResponse();
notification.Response.Write("Error retrieving user info.");
return;
}
..
この回答には多くの知識が含まれています。これらすべての痛みポイントを発見する時間がかかっているはずです。 OPのコールバック中に*例外がスローされる:例外は、 'code'フロー(もちろん設計通り)を求める場合にidsvrの呼び出しで返されないIDトークンによるものです。 –
@CrescentFreshは親切な言葉に感謝します!実際には、OIDCミドルウェアに数回貢献しました(たとえば、response_mode =クエリサポートを導入しました)、OWIN/KatanaとASP.NET 5(https://github.com/aspnet)のサーバー対応版を開発しました-contrib/AspNet.Security.OpenIdConnect.Server)、OIDCに関連する質問に満足している理由を説明しています;)精度を組み込むために私の答えを更新しました。 – Pinpoint
あなたはこの質問で私を助けてくださいすることができます。https://stackoverflow.com/questions/47096113/token-based-implementation-in-webapi-to-secure-endpointsは –