我正在创建一个使用HTTPS的安全的基于Web的API; 但是,如果我允许用户使用查询字符串配置它(包括发送密码)这也是安全的,还是应该通过POST强制它?
构建RESTful资源以重置密码的正确方法是什么?
此资源旨在成为丢失或忘记密码的人的密码重置程序.它使旧密码无效并通过电子邮件向他们发送密码.
我有两个选择:
POST /reset_password/{user_name}
Run Code Online (Sandbox Code Playgroud)
要么...
POST /reset_password
-Username passed through request body
Run Code Online (Sandbox Code Playgroud)
我很确定请求应该是POST.我没有信心选择一个合适的名字.而且我不确定是否应该通过URL或请求正文传递user_name.
我可以控制window.open(跨浏览器)发送的HTTP标头吗?
如果没有,我可以以某种方式在window.open一个页面中,然后在其弹出窗口中使用自定义标题发出我的请求吗?
我需要一些狡猾的黑客.
假设我设置了一个简单的php web服务器,其页面可以通过HTTPS访问.URL有简单的参数,比如https://www.example.com/test?abc=123.
在这种情况下,这里的参数对于嗅探数据包的人来说是否安全?如果服务器不使用任何SSL证书,这是真的吗?
在每次调用我的REST API时,我都要求客户端传递用户的facebook访问令牌,该令牌对用户进行身份验证.传递此令牌的最佳做法是什么?
也许作为HTTP问号背后的参数
GET /api/users/123/profile?access_token=pq8pgHWX95bLZCML
Run Code Online (Sandbox Code Playgroud)或者以某种方式在请求的标题中,类似于HTTP基本认证
GET调用中传递,所以JSON不适合我认为)OAuth 2.0草案v2-22第3.2节说:
在发出访问令牌请求时,客户端必须使用HTTP"POST"方法.
但是,如果您查看Facebook和Foursquare OAuth2实现,他们会要求客户端发出一个简单的GET请求来请求访问令牌.他们要求客户将client_id和client_secret放在URL中.
我正在构建OAuth 2服务器,在看到Facebook和Foursquare的实现后,我强烈考虑打破协议,允许客户端通过GET请求访问令牌.我的网站使用的是SSL,类似于Facebook和Foursquare.
所以我的问题是:我有什么理由不允许客户通过HTTPS通过GET方法请求访问令牌吗?
我有这个curl命令:
curl -k -d . -o SessionRequest.txt
"https://myserver.com/MyWebApi/user?companysn=1234&login=my_login&password=my_password&ApiKey=my_api_key"
Run Code Online (Sandbox Code Playgroud)
“ -d”是什么?代表?它有什么作用?
我有一个 C# SOAP Web 服务以及一些IHTTPHandler部署到https://localhost:123. 我有一个 HTML 页面,http://localhost试图使用 jQuery 将 AJAX POST 请求发送到这些处理程序之一。我每次都会得到以下信息:
XMLHttpRequest 无法加载
https://localhost:123/(S(the_session_id))/MyHandler.ashx。http://localhostAccess-Control-Allow-Origin 不允许来源。
我尝试创建一个CrossOriginModule模块和处理程序,就像这个问题CrossOriginHandler一样,按照他们的建议更新我的 web.config 。我已经尝试添加到我的处理程序中,正如这个问题中所建议的。我尝试按照这篇博客文章中的步骤添加到web.config 中的/中。没有任何帮助。context.Response.AppendHeader("Access-Control-Allow-Headers", "x-requested-with");ProcessRequestOPTIONSSimpleHandlerFactory-Integrated-4.0system.webServerhandlers
这是我的处理程序ProcessRequest:
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "application/json";
context.Response.AppendHeader("Access-Control-Allow-Origin", "*");
context.Response.AppendHeader("Access-Control-Allow-Headers", "x-requested-with");
context.Response.Write( /* some JSON string */ );
}
Run Code Online (Sandbox Code Playgroud)
这是我的 web.config 的相关部分:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders> …Run Code Online (Sandbox Code Playgroud) 我正在使用python requests模块,我之前发送过这样的参数:
requests.post(url=url, params=params)
Run Code Online (Sandbox Code Playgroud)
但是今天,我发现我像这样发送数据,但失败了,我改成这样:
requests.post(url=url, data=params)
Run Code Online (Sandbox Code Playgroud)
那没关系,data和和有params什么区别?
我观察到请求有一个标头X-Requested-With:XMLHttpRequest,是因为这个吗?
我有一个ASP.NET WebAPI项目.我正在使用Bearer Tokens来验证我的用户.我的一些控制器操作标有[Authorized]过滤器.在客户端,客户端通过调用http://foo.bar/Token然后将该令牌添加Authorization为其请求的标头来获取其令牌.
到目前为止没有问题,并且我的Startup.Auth.cs课程中的所有设置都应该正常工作:
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(PublicClientId),
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
// In production mode set AllowInsecureHttp = false
AllowInsecureHttp = true
};
// Enable the application to use bearer tokens to authenticate users
app.UseOAuthBearerTokens(OAuthOptions);
Run Code Online (Sandbox Code Playgroud)
现在我已经为我的项目添加了一些SignalR Hubs,我也想在集线器中验证用户身份.还有一些其他问题涉及客户端如何向SignalR连接添加承载令牌.摘要:
OAuth Provider并将标记作为查询字符串传递.也不鼓励这种方法,因为它可能成为安全问题.但我仍然想使用这种方法,因为我不想要Long Polling.所以我创建了这个类来从查询字符串中检索我的访问令牌. …