小编ran*_*man的帖子

将OAuth令牌传递给javascript客户端的安全方式

我设计的那一刻多平台应用程序(客户端将包括内部开发的移动应用程序,以及AJAX重JavaScript客户端最初)围绕着一个REST API.由于API将来可能对第三方开放,我期待使用OAuth 2.0对API进行身份验证和授权.

我试图通过这种安排来解决一些安全问题,特别是关于javascript客户端.我不希望这个客户端表现得像第三方客户端那样,有大量的重定向和弹出窗口和东西,这是大多数OAuth文档似乎关注的内容.由于它将从我自己的域提供,我认为webapp的服务器端可以是实际的客户端,并存储客户端机密和刷新令牌,而javascript在需要时从服务器检索新的auth令牌.

把它一步一步地形成:

  1. 用户使用非ajax html表单登录,生成auth和刷新令牌,这些令牌存储在服务器端.这将设置仅HTTP登录会话cookie.
  2. 登录后,javascript客户端代码将发送到用户的浏览器.
  3. javascript客户端向作为其自身应用程序(不是REST API的一部分)的一部分的资源发出请求以检索令牌.会话cookie确保客户端是真实的,并且还将检查引用者.返回验证令牌.
  4. javascript客户端使用REST API验证令牌.
  5. 客户端现在可以使用令牌对REST API发出请求,直到它过期.
  6. 如果身份验证令牌过期或页面关闭并重新打开,则javascript客户端可以请求新令牌.只要登录会话cookie仍然有效,webapp的服务器端就会负责刷新令牌并发送新令牌.

这是否有意义,还是会在系统中留下大量漏洞?特别是,在网络上拥有一个基于cookie设置的身份验证令牌的资源是不是很疯狂?

javascript ajax rest oauth oauth-2.0

6
推荐指数
1
解决办法
3872
查看次数

读取WebException的响应流

我有以下方法,基本上使用他们的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一条消息,说明该流不可读.有了这条线,它告诉我,我无法操纵已经关闭的流.这条小溪是怎么关闭的?为什么我不能从中读取?

c# asp.net facebook stream dotnetopenauth

2
推荐指数
1
解决办法
2163
查看次数

标签 统计

ajax ×1

asp.net ×1

c# ×1

dotnetopenauth ×1

facebook ×1

javascript ×1

oauth ×1

oauth-2.0 ×1

rest ×1

stream ×1