ASP NET MVC WebサイトでOpenID Connect標準を使用したサンプルアプリケーションを実装しました。私の目標は機密データをAzureに保存することをアウトソースして、Azure Active Directoryを使用することでした。 Azureのユーザーにカスタムプロパティを追加することは不可能なので、プライベートdbに非機密ユーザーのクレームを保存します。OpenID Connect ASP NET MVC AAD
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUri,
RedirectUri = postLogoutRedirectUri,
Notifications = new OpenIdConnectAuthenticationNotifications
{
AuthorizationCodeReceived = context =>
{
var objectId = context.AuthenticationTicket.Identity.Claims.First(x => x.Type == "http://schemas.microsoft.com/identity/claims/objectidentifier");
var claims = GetUserClaims(objectId.Value);
foreach (var item in claims)
{
context.AuthenticationTicket.Identity.AddClaim(new System.Security.Claims.Claim(item.Key, item.Value));
}
return Task.FromResult(0);
}
}
これらの請求項は結構です、ユーザサインアウトするまで、私のユーザーオブジェクトに固執するので、私はクッキーに必要な主張を追加しました。この方法をしかし:私はこの主張を取得し、このようなクッキーにそれらを「追加」するために管理しましたセッション中に変更できるクレームが1つあります(基本的にユーザーは1ページで変更できます)。問題は、クッキー内のこのクレームを "変更"して永続する方法を見つけることができないことです。理想的には私は何とか
を強制したい
に再び呼び出される関数をAuthorizationCodeReceived。出来ますか ?または、クッキーに保存されている値を交換する別の方法がありますか?
私の唯一の解決策は、この値を変更したときにユーザーをログアウトして再度サインアウトするようにして、AuthorizationCodeReceivedのコールバックをもう一度呼び出すことですが、ユーザーフレンドリーではありません。
あなたに知らせてください。 – MajkeloDev
私はこれを試しました。それはAuthorizationCodeReceivedを呼び出さなかったがうまくいかなかったが、これはうまくいきました。HttpContext.GetOwinContext()。Authentication.Challenge(新しいAuthenticationProperties {RedirectUri = "/"}、OpenIdConnectAuthenticationDefaults.AuthenticationType); – MajkeloDev
私のコードであなたの答えを告げると、私はそれを完了としてマークします。誰かがそれを見つけることができます有用:)#を – MajkeloDev