我应该如何在rails 3 app中创建一个安静的API?另外我想知道是否有一种很好的方法来实现restful身份验证
ruby api restful-authentication ruby-on-rails-plugins ruby-on-rails-3
我有一个iPhone/Android原生应用程序.它使用PHP Web服务(RESTful).如何为我的Web服务添加安全身份验证系统?有些人建议使用访问令牌.如何生成访问令牌以及如何管理它们?我的理解如下:
1)在应用程序中,请求Web服务验证用户名和密码.
2)在Web服务(在服务器上),创建一个唯一且安全的随机密钥,将其作为访问令牌存储在MySQL数据库中,并将其返回给Web服务请求.
3)在应用程序中,存储访问令牌并使用安全的Web服务请求发送它.
4)安全Web服务在完成请求之前检查请求是否包含有效的访问令牌.
以上步骤是否正确?如果是,那么如何使访问令牌到期?我应该使用cron作业(计划任务)吗?请建议一个更好的方法.任何帮助将受到高度赞赏.
我目前有一个 Django 应用程序,它只是一堆 REST API(当然由数据库支持)。我正在使用Django REST framework JWT管理我的身份验证。它工作正常。每当用户登录时,我的 API 之一都会返回一个令牌,消费应用程序存储该令牌以供以后使用。到现在为止还挺好。
但是,将来,此解决方案需要扩展。而不是让单个服务器运行 Django 应用程序,我可以预见我需要多个 Web 服务器的情况。当然,所有这些网络服务器都将连接到同一个数据库。但是由于令牌未存储在数据库中,这将如何与多个 Web 服务器一起使用?一台服务器发出的令牌在另一台服务器上无效。
那么其他人是如何解决这个问题的呢??
django rest restful-authentication django-authentication django-rest-framework
在 OAUTH 中保护 REST API 的总体思路是使用 Authorization Bearer < access token> 标头,通常是 JWT,其中包含有关主题的信息,即。sub: u1 其中u1是数据库中的userId。
有了这样的访问令牌,客户端应用程序就可以访问不同的资源。假设一个用户有很多车,有很多船,等等......所以,以RESTful方式,/users返回所有用户,/users/:u1返回用户u1的数据,返回用户/users/:u1/cars/:c1汽车的数据,返回用户船的数据等。c1u1/users/:u1/boats/:b1b1u1
我的问题是关于u1. 不应该u1从 JWT 访问令牌中提取,因为我们知道我们可以信任 JWT?理论上,应用程序可以使用为 user 颁发的 JWT u1,但请求访问/users/:u2应被禁止。
我们可以使其/users/:u1不可用,并强制客户端应用程序调用并从 JWT 中/users提取。sub但是,调用/users返回数据会u1破坏 RESTful 模式及其优点(即 http 缓存)。
正确的做法是什么?
这可能是authorization关于 REST api 问题的框架。JWT只能寻址authentication而已。
security rest authorization restful-authentication restful-architecture
我已经看到在GET和POST请求中都完成了基本身份验证。
一方面,我认为浏览器缓存GET请求可能是一个问题,但另一方面:POST更大但鼓励提供敏感信息。
我不是在问GET和POST请求之间的区别,而是应该将哪一个用于基本身份验证。应该GET只与 HTTPS 一起使用吗?应该POST一直使用吗?
我的问题是应该使用哪一个?哪个是更好的做法?
java rest restful-authentication jax-rs basic-authentication
我正在尝试实现某种基于角色的身份验证。我正在使用 JWT 令牌。我一直在看指南,但他们都提到了“Spring boot”的使用。我将如何在 Java 的 Restful 端点上设置基于角色的身份验证?最好通过某种过滤器。
我正在寻找一种方法来简单地添加:@Role(Role.ADMIN)在端点之前。
我已经设置了以下课程:
枚举角色:
public enum Role {
User,
Admin
}
Run Code Online (Sandbox Code Playgroud)简单的 JWT 令牌:
{
"sub": "users/TzMUocMF4p",
"exp": 1554646441,
"username": "username@gmail.com",
"ID": 6,
"Role": "Admin",
"iat": 1554641041
}
Run Code Online (Sandbox Code Playgroud)简单的 CRUD 端点
@Path("User")
public class UserResource {
@EJB
private UserDAO userappDAO;
@GET
@JWTTokenNeeded
@Produces("application/json")
public List<Userapp> all() {
return userappDAO.getAll();
}
}
Run Code Online (Sandbox Code Playgroud)JWT 验证 ( @JWTTokenNeeded) 类如下:
@javax.ws.rs.NameBinding
@Retention(RUNTIME)
@Target({TYPE, METHOD})
public @interface JWTTokenNeeded {
}
Run Code Online (Sandbox Code Playgroud)
实际过滤器:
@Provider
@JWTTokenNeeded
@Priority(Priorities.AUTHENTICATION)
public …Run Code Online (Sandbox Code Playgroud)我正在研究企业应用程序,需要使用REST为移动应用程序提供服务.
我想为我的网站实现或构建一个REST API,使用它我可以构建客户端应用程序,并为我的网站提供移动应用程序的服务.
我对它和技术规范的了解非常少.
我的网站使用Spring Framework,并且基于Java构建.
请指导我.
我正在尝试开发一个由移动客户端(iOS客户端,现在)使用的Web服务,我读到RESTful服务比SOAP服务轻得多,所以我想试试这个.
大多数方法都需要身份验证,但我不知道如何处理这个问题,因为我读REST应该是无状态的,所以如何验证从iOS访问服务的用户然后使用该身份验证来验证对其他人的连续调用网络方法?
注意:我将在IIS上使用WCF 4的WebHttp.
谢谢!
我有来自Yii Example的代码
private function _checkAuth()
{
// Check if we have the USERNAME and PASSWORD HTTP headers set?
if(!(isset($_SERVER['HTTP_X_USERNAME']) and isset($_SERVER['HTTP_X_PASSWORD']))) {
// Error: Unauthorized
$this->_sendResponse(401);
}
$username = $_SERVER['HTTP_X_USERNAME'];
$password = $_SERVER['HTTP_X_PASSWORD'];
// Find the user
$user=User::model()->find('LOWER(username)=?',array(strtolower($username)));
$this->_sendResponse('200','$username');
if($user===null) {
// Error: Unauthorized
$this->_sendResponse(401, 'Error: User Name is invalid');
}
else if(!$user->validatePassword($password)) {
// Error: Unauthorized
$this->_sendResponse(401, 'Error: User Password is invalid');
}
}
Run Code Online (Sandbox Code Playgroud)
如何设置标头信息以进行身份验证.如何在请求中设置HTTP_X_USERNAME和HTTP_X_PASSWORD;
对于RESTClient插件的名称,值和主体?谢谢提前
我最近更新到WooCommerce 2.1的最新版本,其中包括一个新的RESTful API.我对cURL或RESTful API没有多少经验,但我认为我给它一个游戏.
我的网站是sergedenimes.com,我在服务器上设置了SSL.
如果我运行,curl https://sergedenimes.com/wc-api/v1我会得到一个很长的json输出,如下所示:
{
"store":{
"name":"Serge DeNimes",
"description":"Original, Urban T-Shirts Of The Highest Quality by Oliver Proudlock",
"URL":"http:\/\/sergedenimes.com",
"wc_version":"2.1.2",
"routes":{
"\/":{
"supports":[
"HEAD",
"GET"
],
"meta":{
"self":"http:\/\/sergedenimes.com\/wc-api\/v1\/"
}
},
"\/customers":{ etc.....
Run Code Online (Sandbox Code Playgroud)
这表明api本身正在发挥作用.但是,当我传递使用身份验证的请求时:
curl https://sergedenimes.com/wc-api/v1/orders -u my_key:my_secret
Run Code Online (Sandbox Code Playgroud)
我得到了回应:
{
"errors":[
{
"code":"woocommerce_api_authentication_error",
"message":"Consumer Key is missing"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我的语法是否正确?我已经在WP管理员下设置了我的密钥和秘密并传递了值,但它似乎认为我没有通过我的请求传递它.
有任何想法吗?