标签: restful-authentication

使用Restful Authentication进行无意中的会话劫持问题

我正在使用github上找到的当前版本的restful_authentication,我遇到了一堆奇怪的会话问题.服务器似乎以某种方式将会话分配给不应该的用户.只有在越过已登出/登录的障碍时才会发生这种情况.

这是一个例子.随着服务器上的活动没有会话,我登录到与用户A在另一台计算机的帐户,我注销用户B的时候,注销重定向发生后的某个时间,我将被记录在与用户B登录然后用户A.从这一点开始,我可以继续浏览网站,就像我以该用户身份登录一样!我通过日志观察到的一点是,当发生这种劫持时,会话ID不一样.用户A在两个会话中都已登录,但会话ID完全不同.这只是可能发生的一个例子.我无法可靠地重现这个问题,因为它似乎是随机的.

它似乎不是环境或运行的服务器的症状.我可以使用杂种和乘客重现这个问题.我也在开发和生产中看到过它.我在这个应用程序中使用基于数据库的会话,它在Rails 2.1.1上运行.我在调用生成器时应用了有状态选项.否则,不会对会话的处理方式进行其他修改.

更新此处是直接来自restful_authentication的有问题的方法.

# Accesses the current user from the session.
# Future calls avoid the database because nil is not equal to false.
def current_user
  @current_user ||= (login_from_session || login_from_basic_auth || login_from_cookie) unless @current_user == false
end
Run Code Online (Sandbox Code Playgroud)

ruby rest ruby-on-rails restful-authentication

10
推荐指数
1
解决办法
1238
查看次数

RestTemplate使用当前httpclient(4.x)进行基本或摘要式身份验证

我正在尝试使用RestTemplatehttpclient(4.x)进行Digest(或基本)身份验证.

由于我找不到任何关于如何实际执行此操作的相关示例,我尝试了各种方法来挂钩各种httpclient工件,没有运气 - 本质上,根本没有发送任何身份验证标头.

我目前的实施是:

DefaultHttpClient newHttpClient = new DefaultHttpClient();
Credentials credentials = new UsernamePasswordCredentials( username, password );
AuthScope authScope = new AuthScope( host, port, AuthScope.ANY_REALM );
BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials( authScope, credentials );
newHttpClient.setCredentialsProvider( credentialsProvider );

HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory( newHttpClient );
restTemplate.setRequestFactory( requestFactory );
Run Code Online (Sandbox Code Playgroud)

有什么我做错了吗?这个地方还有一个可行的例子吗?任何帮助表示赞赏.谢谢.

spring restful-authentication http-authentication basic-authentication resttemplate

10
推荐指数
2
解决办法
6508
查看次数

REST身份验证和HMAC /私钥(何时设置?)

在过去的几天里,我一直在用一个简单的应用程序想法,因为我正在尝试自学REST基础知识.

到目前为止,我已经认识到,实现这一目标的最佳方式是使用亚马逊使用的HMAC.

我最关心的是我究竟如何对用户进行身份验证为他们提供私钥,以便他们可以开始签署HMAC?我一直读取用于签名的HMAC私钥不应该通过线路发送,但后来如何,他们曾经把它摆在首位?

我的想法是这样的,但我不确定这是否有效.

用户数据库表:

users (simplified, this would probably be a private key per client app?)
  id (their public key?)
  username
  password?
  privatekey
Run Code Online (Sandbox Code Playgroud)

假设一个HTML/JS客户端将向用户呈现一个传统的登录页面,该页面向API发送POST,如下所示:

https://example.com/myapp/api/v1/authenticate.json
POST: username / password
Run Code Online (Sandbox Code Playgroud)

那也会回来

404:User not found
200:{ "id" : <id>, "privatekey": <privatekey> }
Run Code Online (Sandbox Code Playgroud)

客户端然后将该密钥存储在某个地方(本地存储/ cookie是安全的地方吗?)并使用它来签署看起来像这样的其他请求

GET https://example.com/myapp/api/v1/something/?key1=value1&publickey={theirID}&hmac={hmac signature of the request using their private key}
Run Code Online (Sandbox Code Playgroud)

然后,服务器将检查公钥,检索关联的私钥并重建HMAC签名,如果它们匹配,则我们有经过身份验证的请求处理它.

我说得对吗?如果我仍然需要像我的例子中那样的密码,我不确定我是否理解私钥的作用,所以有些东西告诉我,我可能错了.

authentication rest web-services restful-authentication

10
推荐指数
1
解决办法
7186
查看次数

如何以安全的方式从S3提供HLS流(授权和验证)

问题:

我在S3中存储了具有给定文件结构的HLS流的数量:

Video1
  ???hls3
      ???hlsv3-master.m3u8
      ???media-1
      ???media-2
      ???media-3
      ???media-4
      ???media-5
  ???hls4
      ???hlsv4-master.m3u8
      ???media-1
      ???media-2
      ???media-3
      ???media-4
      ???media-5
Run Code Online (Sandbox Code Playgroud)

在我的用户API中,我知道哪个用户可以访问哪些视频内容,但我还需要确保视频链接不可共享且只有具有正确权限的用户才能访问.

解决方案:

1)使用signed/temp S3 URL来获取私有S3内容.每当客户想要播放某些特定视频时,它就会向我的API发送请求.如果用户具有正确的权限,则API正在生成签名的URL并将其返回给客户端,客户端将其传递给播放器.

我在这里看到的问题是真实的视频内容存储在media-*目录中的十几个段文件中,我真的不知道如何保护所有这些 - 我是否需要分别对每个段文件URL进行签名?

2)S3内容是私有的.玩家提出的视频流请求通过我的API或单独的反向代理.因此,每当客户决定播放特定视频时,API/反向代理就会收到请求,进行身份验证和授权并传递正确的内容(主播放列表文件和段).

在这种情况下,我仍然需要将S3内容设为私有,并且只能通过我的API/反向代理访问.这里推荐的方式应该是什么? S3通过令牌进行休息认证

3)使用受保护密钥加密.在这种情况下,所有视频片段都是加密的并且是公开的.密钥也存储在S3中, 但不公开.玩家发出的每个关键请求都经过我的API/反向代理的认证和授权.

这些是我现在想到的3个解决方案.不相信所有这些.我正在寻找一些简单且防弹安全的东西.有什么建议/意见吗?

二手技术:

  • ffmpeg用于将视频编码为不同的比特率

  • bento4用于视频分割

restful-authentication amazon-s3 video-streaming http-live-streaming

10
推荐指数
1
解决办法
3620
查看次数

可以通过oauth处理登录的REST客户端

我在基于Rest API的系统上担任测试人员.我的部分工作是使用不同的应用程序将文件POST到Rest API,然后通过Rest Client直接访问API以验证XML是否正确.

到目前为止,我一直在使用RESTClient firefox附加组件.

但现在我们正在摆脱旧的登录,转而支持Oauth.这一切都很好,但它会使测试变得更难,因为我不能(不知道如何?)如何使用我正在使用的REST客户端访问Rest API.我不知道任何其他REST客户端可以做到这一点.

我需要一个可以通过oauth处理登录的REST客户端/ REST浏览器.

更新:
嗨.我仍然在寻找能够处理Oauth的更好的REST客户端.所以,如果你知道任何我会感谢下面的帖子.

testing rest black-box restful-authentication oauth

9
推荐指数
2
解决办法
3万
查看次数

Java Restful Web Services(jax rs)身份验证模式

我已经开始使用JAX-RS为我的Web应用程序创建一个简单的restful接口.目前,它只被一个内部客户端使用(只读),该客户端可以访问所有应用程序数据,我使用http基本身份验证进行访问.我想开始使用它作为我的应用程序的视图层的一部分,并且只有当用户通过Web应用程序登录时才允许某些操作.我正在努力寻找一种模式,允许我以优雅的方式使用两种形式的身份验证,而无需重复大量代码.这大致是我提出的:

首先是一个用于加载应用程序会话的util类,它存储在数据库中.

public class RestUtil {
    public static AppSession getAuthenticatedSession(HttpServletRequest request) {
        AppSession session;
        String remoteUser = request.getRemoteUser();
        if (remoteUser != null) {
            session = SessionRepository.loadSessionByRemoteUser(remoteUser);
        } else {
            session = SessionRepository.loadSessionById(request.getSession().getId());
        }
        return session;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我们的资源,只有一个方法只能由经过身份验证的用户访问,或者我们的http基本身份验证客户端:

@Path("/protected/resource")
public class ProtectedResource {
    @GET
    @Produces(MediaType.TEXT_JSON)
    @Path("{userId}")
    public String getProtectedResourceJson(@Context HttpServletRequest request, @PathParam("userId") Integer userId) {
        // Return Charity List XML
        AppSession session = RestUtil.getAuthenticatedSession(request);

        if (session.canAccessUser(userId))  //get Json...
    }
}
Run Code Online (Sandbox Code Playgroud)

对于这个问题,这是AppSession的最基本视图:

public class AppSession {
    User authenticatedUser;
    String remoteUser;

    public …
Run Code Online (Sandbox Code Playgroud)

java design-patterns restful-authentication jax-rs

9
推荐指数
1
解决办法
3777
查看次数

我是否正确设计了此WCF RESTful接口?

我正在使用WcF身份验证服务创建WCF Web服务,我需要的第一组功能是管理客户端的收件箱.客户端将由身份验证确定.

这是我尝试REST的REST设计:


https://api.mydomain.com/v1/inbox/messages (GET)

使用可选的搜索过滤器返回收件箱中的结果页面

  • 计数 - 每页的记录数
  • 页面 - 开始的页面
  • 排序 - (可选)字段进行排序
  • 搜索 - (可选)要搜索的文本

https://api.mydomain.com/v1/inbox/mark (POST)

标记一条或多条已读或未读的邮件

  • 动作 - MarkRead或MarkUnread
  • MessageIDs - 要标记的消息ID列表

https://api.mydomain.com/v1/inbox/archive (POST)

归档一条或多条消息

  • MessageIDs - 要归档的消息ID列表

我这样做了吗?如果没有,那么设计这个界面会有什么更好的方法呢?

api rest wcf restful-authentication

9
推荐指数
1
解决办法
579
查看次数

Web客户端和移动REST api安全性的推荐配置

我意识到这个问题有很多问题,我现在已经研究了几天了.我想确保我的问题尽可能具体,因为我还没有充分了解最佳方法.

目前我有一个开发的django站点,Web客户端可能通过django-piston json REST api进行大约95%的通信.另外5%是一些重新登录功能,仍然通过具有CSRF保护的POST表单.理想情况下,我想将其余部分也移到REST api中.

我现在需要找到最佳的推荐解决方案,以便以可重用且愉快的共存方式保护Web客户端和移动客户端(应用程序尚未开发).我已经阅读了很多帖子,最终为移动端推荐OAuth2(和https),但我仍然对如何设置Web客户端安全性感到困惑.我也在理解OAuth2方面以及我是否可以使用双腿形式.就目前而言,Web客户端是经过django身份验证的.从技术上讲,jsonp功能在活塞中仍然有效,所以我认为任何人都可以使用第三方应用程序的api,只要他们的网络会话有auth cookie?

我api的用法总结:

  1. API是服务器应用程序的完全私有接口
  2. 如果第三方Web客户端mashup无法广泛重用API,那将是理想的选择.
  3. 数据不是necc敏感的.它只是一个社交类型的网站,其中最个人的信息是电子邮件,地址等基本用户配置文件.

我的问题摘要:

  1. OAuth2是保护移动应用访问安全的最佳推荐方法吗?它与Web客户端方面有什么关系吗?如果推荐OAuth2,它应该是应用程序版本的应用程序范围的密钥吗?
  2. Web客户端是否应该使用通过ajax传递的CSRF,并且只是禁用jsonp以确保其始终相同的来源?基本上,我是否单独处理Web客户端安全性?
  3. 我应该如何组织urls/app实例/子域或建议维护Web与移动安全的任何内容?我是否只需要单独的网址前缀,一个用于使用不同规则的移动设备?

我正在寻找django-piston针对解决这些问题的具体建议.我已经分支了我的项目并开始使用这个分叉版本的活塞:https://bitbucket.org/jespern/django-piston-oauth2

我有一个想法是创建一个活塞资源,首先检查它是否同源,然后只强制执行django auth,否则它强制执行oauth2,但我不确定这是否合适.

2012年1月1日更新

根据Spike提供的信息,我开始使用piston-oauth2.我最终创建了一个fork来为nonrel django(mongodb)添加一些修复程序,我分叉someone示例也使用oauth2和活塞:

https://bitbucket.org/justinfx/django-piston-oauth2-nonrel-example

现在只是我的一个问题,真正把它连接到我自己的项目并使其工作.但这些测试都很有效.

django mobile restful-authentication django-piston oauth-2.0

9
推荐指数
1
解决办法
1897
查看次数

使用spring安全性保护REST端点

我正在尝试为REST端点提供安全性.我正在按照本页的说明操作.在我的情况下,我没有视图,因此我没有创建控制器来指定视图,也没有在我的AppConfig.java中添加viewResolver

实现后,它在调用安全的REST端点时正确显示访问被拒绝错误.但即使我在请求标头中指定了用户名/密码,我也会收到拒绝访问错误.我正在测试基本身份验证中的邮递员设置用户名/密码.我有什么想法?

ws-security authorization restful-authentication spring-security rest-security

9
推荐指数
1
解决办法
1807
查看次数

在Spring Boot API上实现JWT身份验证

我有一个SpringBoot 2.0.2.RELEASE Web应用程序,带有这个配置文件:

@Override
protected void configure(HttpSecurity http) throws Exception {

    final List<String> activeProfiles = Arrays.asList(env.getActiveProfiles());
    if (activeProfiles.contains("dev")) {
        http.csrf().disable();
        http.headers().frameOptions().disable();
    }

    http
        .authorizeRequests()
        .antMatchers(publicMatchers()).permitAll()
        .anyRequest().authenticated()
        .and()
        .formLogin().loginPage("/login").defaultSuccessUrl("/bonanza/list")
        .failureUrl("/login?error").permitAll()
        .and()
        .logout().permitAll();
    }
Run Code Online (Sandbox Code Playgroud)

我想添加一个基于自定义JWT的安全过滤器,仅用于匹配的Rest控制器/rest/**,所以我将配置修改为此文件,但现在我无法登录到应用程序,因为我有一个HTTP状态401 -擅自

@Override
protected void configure(HttpSecurity http) throws Exception {

    final List<String> activeProfiles = Arrays.asList(env.getActiveProfiles());
    if (activeProfiles.contains("dev")) {
        http.csrf().disable();
        http.headers().frameOptions().disable();
    }

    http
       .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
       // don't create session
       .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
       .authorizeRequests()
       .antMatchers(publicMatchers()).permitAll()
       .anyRequest().authenticated()
       .and()
       .formLogin().loginPage("/login").defaultSuccessUrl("/bonanza/list")
                   .failureUrl("/login?error").permitAll()
       .and()
       .logout().permitAll();


       // Custom JWT based security filter
       JwtAuthorizationTokenFilter authenticationTokenFilter = …
Run Code Online (Sandbox Code Playgroud)

rest restful-authentication spring-security jwt spring-boot

9
推荐指数
1
解决办法
645
查看次数