大量问题使其发挥作用。
以为我会提出常见问题和解决方案浪费了一天的时间,并通过其他答案引导了许多虚假的道路。
设置:
问题:
no access-control-allow-origin header is present
WithCredentials
并修复此问题,现在GET
正常工作但PUT
,POST
& DELETE
因飞行前的问题而失败。答案 0 :(得分:0)
解决方案:
首先,您的服务器需要为cors启用,这必须是您的应用配置中的第一行:
WebApp.Start(_configuration.Url, app =>
{
app.UseCors(CorsOptions.AllowAll);
OPTIONS
来电: var listener = (HttpListener)app.Properties["System.Net.HttpListener"];
listener.AuthenticationSchemeSelectorDelegate = request =>
request.HttpMethod == "OPTIONS"
? AuthenticationSchemes.Anonymous
: AuthenticationSchemes.Negotiate;
将您的Angular代码设置为使用WithCredentials
发送呼叫。有很多不同的方法可以做到这一点,但我们使用了一个身份验证拦截器:
intercept(request: HttpRequest<any>, next: HttpHandler):
Observable<HttpEvent<any>> {
const authReq = request.clone({ withCredentials: true });
return next.handle(authReq)
如果您想为Auth做任何有趣的事情,可以通过扩展OwinMiddleware
并覆盖Invoke
方法来创建自己的中间件。然后,您可以使用app.Use<MyMiddleware>(paramsToConstructor)
方法在override
方法中注册,然后您可以通过以下方式访问用户的身份:
var identity = new ClaimsIdentity(context.Authentication.User.Identity.AuthenticationType);