私はstackoverflowのnoobです。asp.net core identity外部ログイントークンを抽出して保存し、ローカルアイデンティティにクレームを追加
私はデフォルトコアIDテンプレート(ローカルアカウント)を使用してasp.netコアを使用しています。
は、私は彼らがそう
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginInputModel model)
{
if (ModelState.IsValid)
{
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, set lockoutOnFailure: true
var user = await _userManager.FindByNameAsync(model.Email);
await _userManager.AddClaimAsync(user, new Claim("your-claim", "your-value"));
のようにローカルでログインしたときに、ユーザープリンシパルにクレームを追加する方法accertainedていると私は外部ログインから返されたクレームを取得する方法を考え出したが、私は追加する方法を見つけ出すことはできませんこれらのユーザプリンシパルがExternalLoginCallback機能に
public async Task<IActionResult> ExternalLoginCallback(string returnUrl = null, string remoteError = null)
{
if (remoteError != null)
{
ModelState.AddModelError(string.Empty, $"Error from external provider: {remoteError}");
return View(nameof(Login));
}
var info = await _signInManager.GetExternalLoginInfoAsync();
if (info == null)
{
return RedirectToAction(nameof(Login));
}
else {
// extract claims from external token here
}
// assume add claims to user here before cookie gets created??
// Sign in the user with this external login provider if the user already has a login.
var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false);
if (result.Succeeded)
を作成される前に、私は_signInManager.ExternalLoginSignInAsync機能は、かつての意味でのローカルログイン_signInManager.PasswordSignInAsyncに似た働きと仮定していますそれが呼び出され、クッキーが作成されます。しかし、私は確信していません。
基本的には、ユーザーのログイン方法(ローカルまたは外部)に関係なく作成されるCookieにカスタムクレームを追加する方法と、必要に応じてこれらのクレームをデータベースに保持する方法を理解することです。 。
私はgoogle authと言うユーザーのログイン情報を持っている場合、後でGoogle APIを呼び出したいので、Googleからそのaccess_tokenを保存する必要があります。だから私は作成されるユーザープリンシパルでこのaccess_tokenを含めることができる必要があり、私はクッキーがフロントエンドでも使うことができるクレームを持っていると思います。
これはこの質問の範囲外かもしれませんが、Googleトークンの有効期限が切れたときに、リフレッシュトークンを使用して新しいトークンを取得するか、ユーザーに再ログインさせるようにしたいと思います。
これについての助けがあれば、非常に感謝しています。私は本当にこの問題をstackoverflowに投稿せずにこれを理解しようとしました。私は有用な情報をたくさん持っている多くの記事を読んだが、この特定の質問が求めている答えを提供していない。大変ありがとうございます。
歓声