【发布时间】:2020-10-15 19:26:22
【问题描述】:
我在 ASP.NET Core Web API 上有一个后端,在 Angular 9 上有一个前端。我正在实施 google 身份验证。在邮递员中它工作正常,但在我的角度应用程序中,当我尝试通过谷歌授权时出现错误:
Access to XMLHttpRequest at 'https://accounts.google.com/o/oauth2/v2/...
(redirected from 'https://localhost:44340/api/auth/googlelogin')
from origin 'http://localhost:4200' has been blocked by CORS policy:
Response to preflight request doesn't pass access control check:
Redirect is not allowed for a preflight request.
后端的CORS配置:
services.AddCors(options =>
{
options.AddPolicy("MyPolicy",
builder =>
{
builder
.WithOrigins(Configuration["ApplicationSettings:Client_URL"].ToString())
.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod();
});
});
app.UseCors("MyPolicy");
我的服务中的方法
public ChallengeResult LoginViaGoogle()
{
var provider = "Google";
var redirectUrl = "/api/auth/ExternalLoginCallBack";
var properties = Database.SignInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl);
return new ChallengeResult(provider, properties);
}
我的控制器中的方法
[HttpGet("GoogleLogin")]
public IActionResult GoogleLogin()
{
ChallengeResult result;
try
{
result = _authService.LoginViaGoogle();
}
catch(Exception ex)
{
throw ex;
}
return result;
}
我在 Angular 中的方法:
googleLogin(){
const httpOptions = {
headers: new HttpHeaders({
"Access-Control-Allow-Origin": "*"
})
};
return this.http.get("https://localhost:44340/api/auth/googlelogin", httpOptions);
}
我在这个网站上尝试了很多解决方案,但都没有帮助。
【问题讨论】:
-
你的 appconfig 文件中 Client_URL 的值是多少?
-
@bthn
http://localhost:4200,除了谷歌身份验证,一切正常。 -
我认为 google 无法向您的本地主机发送请求。您应该购买或使用免费域并托管您的应用程序并将该域提供给 google。
-
我不确定,但也许你也可以尝试使用 ngrok 让 google auth 与 localhost 一起工作。
-
@bthn 但如果我在浏览器或邮递员中访问我的 api uri
https://localhost:44340/api/auth/googlelogin我可以授权并获取令牌,所以我认为问题与本地主机无关。
标签: c# asp.net-core google-api cors google-oauth