我设计的那一刻多平台应用程序(客户端将包括内部开发的移动应用程序,以及AJAX重JavaScript客户端最初)围绕着一个REST API.由于API将来可能对第三方开放,我期待使用OAuth 2.0对API进行身份验证和授权.
我试图通过这种安排来解决一些安全问题,特别是关于javascript客户端.我不希望这个客户端表现得像第三方客户端那样,有大量的重定向和弹出窗口和东西,这是大多数OAuth文档似乎关注的内容.由于它将从我自己的域提供,我认为webapp的服务器端可以是实际的客户端,并存储客户端机密和刷新令牌,而javascript在需要时从服务器检索新的auth令牌.
把它一步一步地形成:
这是否有意义,还是会在系统中留下大量漏洞?特别是,在网络上拥有一个基于cookie设置的身份验证令牌的资源是不是很疯狂?
我有以下方法,基本上使用他们的Facebook凭据验证用户.出于某种原因,我WebException在尝试处理授权密钥(代码)时遇到了问题.所以我试着读取响应流以便知道发生了什么,但是在读取流时我一直收到错误.这是我的代码:
private void OnAuthCallback(HttpContextWrapper context, WebServerClient client)
{
try
{
IAuthorizationState authorizationState = client.ProcessUserAuthorization(context.Request);
AccessToken accessToken = AccessTokenSerializer.Deserialize(authorizationState.AccessToken);
String username = accessToken.User;
context.Items[USERNAME] = username;
}
catch (ProtocolException e)
{
if (e.InnerException != null)
{
String message = e.InnerException.Message;
if (e.InnerException is WebException)
{
WebException exception = (WebException)e.InnerException;
var responseStream = exception.Response.GetResponseStream();
responseStream.Seek(0, SeekOrigin.Begin);
using (StreamReader sr = new StreamReader(responseStream))
{
message = sr.ReadToEnd();
}
}
EventLog.WriteEntry("OAuth Client", message);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我删除该responseStream.Seek(0, SeekOrigin.Begin);行,它会给我ArgumentException一条消息,说明该流不可读.有了这条线,它告诉我,我无法操纵已经关闭的流.这条小溪是怎么关闭的?为什么我不能从中读取?