MVC 6 .NET Core Web サイトを Azure B2C で動作させるのに時間を費やしましたが、すべてうまく機能しているようです。ただし、正しい戦略を理解できないように見えるという主張を取り巻くいくつかの疑問があります.
ユーザーが私のサイトに電子メール、名、姓でサインアップしたとします。登録が完了したら、このユーザーを参照するデータベースの UserProfile テーブルにレコードを追加したいと考えています。
質問 1: Azure B2C で "UserProfileId" クレームを作成する必要がありますか? または、AD ユーザーを参照するデータベース テーブルに「ObjectId」フィールドを作成する必要がありますか? もっと意味のあることは何ですか?
質問 2: ユーザーが登録したら、どこでどのように AD ユーザー クレームを更新しますか? これらのイベントのいずれかでそれを行いますか? それとも別の場所ですか?確認できる「ユーザーは新規です」というクレームがありますか?
OnAuthenticationValidated
OnAuthorizationCodeReceived
OnRedirectToAuthenticationEndpoint
質問 3: クレームを更新するには、Microsoft.Azure.ActiveDirectory.GraphClient を使用しますか? カスタム クレームを更新する方法のサンプル コードはありますか? 私はこれを試しましたが、持続していないようです:
var identity = context.AuthenticationTicket.Principal.Identity as ClaimsIdentity;
identity?.AddClaim(new Claim("EmployeeId", "33"));
これが私の認証設定です。ありがとう!!!!!
public void ConfigureAuth(IApplicationBuilder app, IOptions<PolicySettings> policySettings, AuthenticationHelper authHelper)
{
app.UseCookieAuthentication(options =>
{
options.AutomaticAuthenticate = true;
options.AutomaticChallenge = true;
options.AccessDeniedPath = "/Home/Forbidden";
options.CookieSecure = CookieSecureOption.Always;
options.ExpireTimeSpan = TimeSpan.FromHours(1);
options.SlidingExpiration = true;
});
app.UseOpenIdConnectAuthentication(options =>
{
options.PostLogoutRedirectUri = policySettings.Value.PostLogoutRedirectUri;
options.AutomaticAuthenticate = true;
options.AutomaticChallenge = true;
options.ClientId = policySettings.Value.ClientId;
options.CallbackPath = new PathString("/signin-mysite");
options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.Scope.Add("openid");
options.Scope.Add("profile");
options.Scope.Add("email");
options.ResponseType = OpenIdConnectResponseTypes.IdToken;
options.Authority = string.Format(CultureInfo.InvariantCulture, "{0}/{1}", policySettings.Value.AadInstance, policySettings.Value.Tenant);
options.Events = new OpenIdConnectEvents {
OnAuthenticationValidated = OnAuthenticationValidated,
OnAuthorizationCodeReceived = OnAuthorizationCodeReceived,
OnAuthenticationFailed = OnAuthenticationFailed,
OnRedirectToAuthenticationEndpoint = OnRedirectToAuthenticationEndpoint
};
options.ConfigurationManager = new PolicyConfigurationManager(
String.Format(CultureInfo.InvariantCulture, "{0}/{1}/{2}/{3}", policySettings.Value.AadInstance, policySettings.Value.Tenant, "v2.0", OpenIdProviderMetadataNames.Discovery),
new string[] { policySettings.Value.SignUpInPolicyId, policySettings.Value.ProfilePolicyId, policySettings.Value.PasswordPolicyId });
});
}