コンテキストはどのようにWEBAPIはAngular2 SPAに組み込むことがChallengeResultことができますか?
我々はAngular2 単一ページのアプリケーション(SPA)のフロントエンドを使用するようにAsp.Netコア(ウェブAPI)を使用してWebアプリケーションを移行しています。このアプリケーションは当初、「個人ユーザーアカウント」で作成されました。 cshtmlビューをAngular2コンポーネントに変換しました。コントローラメソッドはJsonを生成し、認証にJWTを組み込んでいます。
私はこのConfiguring Google authenticationマイクロソフトのドキュメントを使用してきました。
通報
問題は、次の2つのコントローラの方法によって示されています。 LinkLogin
メソッドは、ChallengeResult
アクションを返します。明らかに、これはJSONに変換できません。私は、この結果は、ブラウザが自動的にリダイレクトLinkLoginCallback
、外部ログインプロバイダにリダイレクトする原因になるとされている推測。
[HttpPost]
public async Task<IActionResult> LinkLogin([FromBody] string provider)
{
// Clear the existing external cookie to ensure a clean login process
await HttpContext.Authentication.SignOutAsync(externalCookieScheme);
// Request a redirect to the external login provider to link a login for the current user
string redirectUrl = Url.Action(nameof(LinkLoginCallback), "Manage");
var properties = signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl, userManager.GetUserId(User));
return Challenge(properties, provider);
}
[HttpPost]
[Produces("application/json")]
public async Task<ActionResult> LinkLoginCallback()
{
User user = await userManager.GetUserAsync(User);
if (user == null)
return Json(false);
ExternalLoginInfo info = await signInManager.GetExternalLoginInfoAsync(await userManager.GetUserIdAsync(user));
if (info == null)
return Json(false);
IdentityResult result = await userManager.AddLoginAsync(user, info);
if (result.Succeeded)
{
// Clear the existing external cookie to ensure a clean login process
await HttpContext.Authentication.SignOutAsync(externalCookieScheme);
return Json(true);
}
return Json(false);
}
私はこの応答を得る角度からLinkLogin
を呼び出そうとするならば:プリフライトリクエストに
応答は、アクセス制御チェックに合格しない:いいえ「アクセス制御 - 許可 - 起源」ヘッダを要求されたリソースに存在します。 Origin 'http://localhost:53462'はアクセスできません。応答にHTTPステータスコード405がありました。
あなたはCORSを設定している:ここでは、接続を証明する私の
LinkProvider
方法はありますか? https://docs.microsoft.com/en-us/aspnet/core/security/cors – regnauld)(services.AddCorsがあります。ただし、app.UseCors();私はそれを使うなら、それが何をするかを見ていきます。 – TomTom
動作しません。両方のコントローラメソッドに '[EnableCors(" ExternalLoginPolicy ")]'を追加しました。私は原産地 'https://accounts.google.com'をポリシー設定に追加しました。 – TomTom