来自其他域和计算机的 Web API Post
Web API Post from other domain and computers
我创建了一个基于 asp.net 的新 Web-API。
如果我没理解错的话,你不能从其他域 POST/GET。
我需要将此网站 API 提供给我的朋友,他们使用 php/javascript/andriod/iphone 并允许他们 POST/GET 访问我的网站 API。
有什么方法可以用 user/password 或类似的东西得到 POST/GET 吗?
对于 .NET Web API
set WebAPI basic authentications.
Articles in this issue
http://www.asp.net/web-api/overview/security/basic-authentication
设置 WebAPI 允许跨域。
本期文章
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
请注意,我假设您使用的是 webapi 2.2
这就是我要做的。首先,按照本教程在网络中创建个人帐户 api:
http://www.asp.net/web-api/overview/security/individual-accounts-in-web-api
这将允许您的用户使用您的 api 注册并安全地存储凭据。然后,您可以在控制器或个别方法上使用 Authorize 属性(取决于您想要实现的目标)。
用户注册后,它可以通过传递用户名和密码从令牌端点请求访问令牌(在生产中确保您使用 https)。收到令牌后,您可以存储此客户端并将其与请求的 header 一起发送。
接下来是 CORS。完成上述操作后,您可以将服务器设置为允许来自任何来源的所有跨域,通过执行以下操作使用和动词:
使用 nuget 包管理控制台发出以下命令:
Install-Package Microsoft.Owin.Cors -Version 2.1.0
在您的启动 class(通常是 Startup.cs)中添加以下行:
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
如果您想更具选择性,您可以创建自己的自定义策略。
注意:
值得注意的是,如果请求不被视为简单,浏览器只会发出 pre-flight 请求(OPTIONS)。一个不简单的请求定义如下:
它使用 GET、HEAD 或 POST 以外的方法。另外,如果使用 POST
发送带有 Content-Type 以外的请求数据
application/x-www-form-urlencoded、multipart/form-data 或
text/plain,例如如果 POST 请求向
服务器使用 application/xml 或 text/xml,则请求是
预检。
在请求中设置自定义headers(例如请求使用header如X-PINGOTHER)
(有关详细信息,请参阅此处:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS)
应该是这样。
祝你好运。
我创建了一个基于 asp.net 的新 Web-API。
如果我没理解错的话,你不能从其他域 POST/GET。
我需要将此网站 API 提供给我的朋友,他们使用 php/javascript/andriod/iphone 并允许他们 POST/GET 访问我的网站 API。
有什么方法可以用 user/password 或类似的东西得到 POST/GET 吗?
对于 .NET Web API
set WebAPI basic authentications.
Articles in this issue
http://www.asp.net/web-api/overview/security/basic-authentication
设置 WebAPI 允许跨域。
本期文章
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
请注意,我假设您使用的是 webapi 2.2
这就是我要做的。首先,按照本教程在网络中创建个人帐户 api:
http://www.asp.net/web-api/overview/security/individual-accounts-in-web-api
这将允许您的用户使用您的 api 注册并安全地存储凭据。然后,您可以在控制器或个别方法上使用 Authorize 属性(取决于您想要实现的目标)。
用户注册后,它可以通过传递用户名和密码从令牌端点请求访问令牌(在生产中确保您使用 https)。收到令牌后,您可以存储此客户端并将其与请求的 header 一起发送。
接下来是 CORS。完成上述操作后,您可以将服务器设置为允许来自任何来源的所有跨域,通过执行以下操作使用和动词:
使用 nuget 包管理控制台发出以下命令:
Install-Package Microsoft.Owin.Cors -Version 2.1.0
在您的启动 class(通常是 Startup.cs)中添加以下行:
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
如果您想更具选择性,您可以创建自己的自定义策略。
注意: 值得注意的是,如果请求不被视为简单,浏览器只会发出 pre-flight 请求(OPTIONS)。一个不简单的请求定义如下:
它使用 GET、HEAD 或 POST 以外的方法。另外,如果使用 POST 发送带有 Content-Type 以外的请求数据 application/x-www-form-urlencoded、multipart/form-data 或 text/plain,例如如果 POST 请求向 服务器使用 application/xml 或 text/xml,则请求是 预检。
在请求中设置自定义headers(例如请求使用header如X-PINGOTHER)
(有关详细信息,请参阅此处:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS)
应该是这样。
祝你好运。