У меня есть Asp.Net Web Api с механизмом аутентификации JaT Oauth.Таким образом, в файле Startup.cs
я определил политику cors следующим образом:
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
И я использую билет подтверждения таким образом в CustomOAuthProvider
class:
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var allowedOrigin = "*";
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { allowedOrigin });
var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();
ApplicationUser user = await userManager.FindAsync(context.UserName, context.Password);
if (user == null)
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
return;
}
if (!user.EmailConfirmed)
{
context.SetError("invalid_grant", "User did not confirm email.");
return;
}
ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager, "JWT");
var ticket = new AuthenticationTicket(oAuthIdentity, null);
context.Validated(ticket);
}
}
Как вы можете видеть, я определил заголовки ответов в этом:
var allowedOrigin = "*";
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { allowedOrigin });
Я не мог установить где-нибудь EnableCors
, просто в StartUp.cs
.
Но я получаю эту ошибку в клиентеside (Angular 8):
Access to XMLHttpRequest at 'http://localhost:50522/oauth/token' from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Я пытаюсь использовать метод login
в угловом формате, например:
login(username: string, password: string, grant_type: string) {
let headers = new HttpHeaders();
headers.append('Content-Type', 'application/json');
return this.http.post<any>(`${environment.urlAddress}/oauth/token`, JSON.stringify({ username, password, grant_type }), { headers })
.pipe(map(user => {
console.log(user);
// store user details and jwt token in local storage to keep user logged in between page refreshes
console.log(user);
localStorage.setItem('currentUser', JSON.stringify(user));
this.currentUserSubject.next(user);
return user;
}))
}
Я не мог точно понять, в чем проблема.
Пожалуйста, помогите.