我创建了一个新的基于Web-API的asp.net。
如果我理解正确,您就无法从其他域发布/获取。
我需要将这个网络API提供给我的朋友,他们使用php / javascript / andriod / iphone并能够允许他们POST / GET到我的网页API。
有没有办法用用户/密码或类似的东西获得POST / GET?
答案 0 :(得分:0)
for .NET Web API
set WebAPI basic authentications.
Articles in this issue
http://www.asp.net/web-api/overview/security/basic-authentication
设置WebAPI允许跨域。 Aricles在这个问题上 http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api
示例获取javascript AJAX添加此行
beforeSend: function (xhr) {
xhr.setRequestHeader ("Authorization", "Basic "+btoa(username + ':'+password);
},
btoa图书馆是https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/btoa
答案 1 :(得分:0)
注意我假设您使用的是webapi 2.2
这就是我要做的。首先,按照本教程在web api中创建个人帐户:
http://www.asp.net/web-api/overview/security/individual-accounts-in-web-api
这将允许您的用户注册您的API并安全地存储凭据。然后,您可以使用控制器上的Authorize属性或单个方法(取决于您想要实现的目标)。
用户注册后,可以通过传入用户名和密码(生产中确保使用https)从令牌端点请求访问令牌。收到令牌后,您可以存储此客户端并使用请求的标头发送它。
对CORS来说。完成上述操作后,您可以通过执行以下操作将服务器设置为允许来自任何源的所有跨域,使用和动词:
使用nuget包管理控制台发出以下命令:
Install-Package Microsoft.Owin.Cors -Version 2.1.0
在你的启动类(通常是Startup.cs)中添加以下行:
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
如果您想要更具选择性,可以创建自己的自定义政策。
注意: 值得注意的是,如果请求不简单,浏览器将仅发出飞行前请求(OPTIONS)。 not simple 的请求定义如下:
它使用GET,HEAD或POST以外的方法。此外,如果使用POST 使用除以外的Content-Type发送请求数据 application / x-www-form-urlencoded,multipart / form-data,或 text / plain,例如如果POST请求发送XML有效负载 服务器使用application / xml或text / xml,然后请求是 预检。
它在请求中设置自定义标头(例如,请求使用标头,例如X-PINGOTHER)
(有关详情,请参阅此处:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS)
应该是它。
祝你好运。