gpt4 book ai didi

asp.net-web-api - Web API 中的 OWIN CORS 问题

转载 作者:行者123 更新时间:2023-12-02 16:04:14 27 4
gpt4 key购买 nike

我正在使用 WebApi 并尝试使用 OWIN 添加基于 token 的身份验证。当客户端和服务位于同一端口时,它工作正常。但是当两者位于不同的服务器上时会遇到问题。我正在使用 Jquery Ajax 方法来调用 token 服务。这是我使用过的代码示例。欧文代码:

 public class Startup  
{
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
WebApiConfig.Register(config);
ConfigureOAuth(app);
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseWebApi(config);
}
public void ConfigureOAuth(IAppBuilder app)
{

OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
{

AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/WagtokenService"),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(30),
Provider = new ProjectAuthorizationServiceProvider()
};

// Token Generation
app.UseOAuthAuthorizationServer(OAuthServerOptions);

app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());

}

}

提供者

    public class ProjectAuthorizationServiceProvider : OAuthAuthorizationServerProvider  
{
public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
context.Validated();
}

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var allowedOrigin = context.OwinContext.Get<string>("as:clientAllowedOrigin");
if (allowedOrigin == null) allowedOrigin = "*";
bool isValidUser = false;
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });

if (context.UserName == "Test@Mail.com" && context.Password == "national")
{
isValidUser = true;
}

if (!isValidUser)
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
return;
}

var identity = new ClaimsIdentity(context.Options.AuthenticationType);
identity.AddClaim(new Claim("sub", context.UserName));
identity.AddClaim(new Claim("role", "admin"));

context.Validated(identity);
}
}

WebApi 配置

    public static class WebApiConfig  
{
public static void Register(HttpConfiguration config)
{
var cors = new EnableCorsAttribute("http://192.168.2.175:3330", "WagtokenService,accept,accesstoken,authorization,cache-control,pragma,content-type,origin", "GET,PUT,POST,DELETE,TRACE,HEAD,OPTIONS");

config.EnableCors(cors);

config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "NewActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}

单击登录按钮时将调用以下代码片段。

$('#a_login').click(function (e) {  
debugger;
if (isValidEmailAddress($('#txt_UID').val()) && $('#txt_PWD').val() != "") {
var loginData = {
grant_type: 'password',
username: $('#txt_UID').val(),
password: $('#txt_PWD').val()
};

$.ajax({
url: url_bearerToken,
type: 'POST',
data: loginData,
contentType: "application/json",
done: function (data) {
// alert('success fully sign in to the application');
sessionStorage.setItem(bearer_token_key, data.access_token);
},
success: function (data) {
// alert('success fully sign in to the application');
sessionStorage.setItem(bearer_token_key, data.access_token);
window.location.href = "../Admin/UserProfiler.html";
},
error: function (x, h, r) {
///e.preventDefault();
// alert("Invalid user credentials");
$('#div_alert').show();
sessionStorage.setItem(bearer_token_key, '');
}
});
}
else {
$('#div_alert').show();
}
});

获取关注问题。

XMLHttpRequest 无法加载 http://localhost:53014/WagtokenService 。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin” header 。来源'http://192.168.2.175:3330 ' 因此不允许访问。

最佳答案

正如 Marcus 所说,无论是在 Web API 中还是在 OWIN 中提及 CORS 设置就足够了。

关于asp.net-web-api - Web API 中的 OWIN CORS 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41055403/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com