如何从基于REST的WCF服务读取授权标头信息?
我今天开始为我的rails应用程序编写功能测试.我使用RESTful身份验证插件.我遇到了一些令人困惑的事情,我希望有人可以为我澄清.
1)我写了一个快速登录功能,因为我的rails应用程序中的大多数功能都需要身份验证.
def login_as(user)
@request.session[:user_id] = user ? user.id : nil
end
Run Code Online (Sandbox Code Playgroud)
我看到这个函数的问题,它基本上是伪造的身份验证.我应该担心吗?也许只要我在某处测试真正的身份验证方法就可以走这条路.或者这可能是一种糟糕的做法.
2)第二个令人困惑的事情是,在我的功能测试的某些地方,我需要完整的身份验证过程.当用户被激活时,我有do_activate方法为用户创建一些初始对象.它类似于为学生应用程序创建空白笔记本对象和笔对象,如果这是有意义的.
因此,为了正确测试我的应用程序,我需要用户点击该激活状态,以便创建这些对象.我目前正在使用Factory Girl创建用户,然后调用上面的login_as函数来伪造身份验证.
我想另一个选择是跳过完整的身份验证序列,然后用Factory Girl创建空白对象.我可以在其他地方测试正确的身份验证.
你怎么看?如果我应该通过正确的序列,为什么下面的代码不是调用do_activate函数?
user = Factory.create(:user)
user.active = 1
user.save
Run Code Online (Sandbox Code Playgroud)
谢谢!
testing ruby-on-rails restful-authentication functional-testing
我已经安装了RESTFUL身份验证,一切似乎都运行正常.我可以注册并登录.我可以注销的唯一方法是输入URL http:// localhost:3000/logout
如何在页面上添加注销按钮?我尝试在members.rhtml中添加一个
<%= link_to "logout", :controller=> "sessions", :action=> "destroy" %>
Run Code Online (Sandbox Code Playgroud)
它引用了session_controller.rb,但是我收到错误"没有动作响应显示.动作:创建,销毁和新"
有什么想法吗?感谢名单
我已成功在web.xml(java-webcontainer)中设置FORM-authentication.
在使用FORM-Authentication时,我没有找到在我的客户端的restful-uri的get-request中发送用户名/密码的方法.所以我必须只为restful-uri使用BASIC-Authentication.
所以我有这个问题:
如何设置基于表单的身份验证和基本身份验证?只应为restful-uri启用基本身份验证.
我们有一个访问Google Cloud Endpoints后端的HTML5客户端.我们希望为用户提供的登录方法合理的范围内,例如:签到与现有的OpenID,或者登录了同一个电子邮件地址和密码.这些似乎是我们的基本要求!如果有更好的选择不会限制我们的受众,那么我们会考虑它.
我们遇到两个问题:(1)似乎终端服务只会验证Google帐户,(2)我们不知道如何支持"使用电子邮件和密码注册"以及终端.
编辑:我们发现我们的需求可以与端点一起使用,但我们没有找到任何Python示例来帮助或支持OpenID提供程序.我们创建了自己的"电子邮件/密码"身份验证选项,并与Google OAuth并行启用.总体而言,使用Cloud Endpoint时的身份验证文档很少.对于较新的"移动后端"项目,文档和示例更为强大.
openid google-app-engine restful-authentication google-cloud-endpoints google-oauth
我的REST API(api.example.com)目前是OAuth2提供商,并且一直是移动应用程序的支持.
最近我们创建了一个新的网站(www.example.com),它将像任何其他客户一样对待.Web可以使用密码grant_type在API上进行身份验证,其中用户键入其凭据.从那里,客户端(浏览器)获取访问令牌,并且可以使用API.
问题在于我们想要使用Facebook在网页上验证客户端.
所以基本上,网络最终应该能够通过Facebook登录获得用户访问令牌来访问API.
我环顾四周,看过两条腿和三条腿的OAuth2认证方案,但是:
authentication restful-authentication oauth oauth-2.0 facebook-login
我打算使用下面的代码来实现我的web api安全性,但我不确定这是否足够安全和合理.我不想使用OWIN和AspNet.Identity,因为它对我来说非常复杂,我不完全理解,我不知道我如何定制数据库表,用户角色等.但我的方式很简单,非常可定制我.
这是CustomAuthorizeAttribute;
public class CustomAuthorize : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if ((actionContext.Request.Headers.GetValues("Host").FirstOrDefault().Contains("localhost:15742")))
{
IEnumerable<string> access_token;
if (actionContext.Request.Headers.TryGetValues("Authorization", out access_token))
{
var user = GetUserByToken(access_token);
if (user!=null && !user.TokenIsExpired)
{
HttpContext.Current.Response.AddHeader("WWW-Authenticate", "Custom " + access_token.FirstOrDefault());
return;
}
else
{
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
HttpContext.Current.Response.AddHeader("WWW-Authenticate", "Custom");
return;
}
}
else
{
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
}
}
else
{
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Forbidden);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是前端使用
<script type="text/javascript">
$(function () {
var access_token = $.cookie('access_token');
if (access_token == undefined) …Run Code Online (Sandbox Code Playgroud) asp.net restful-authentication authorize-attribute custom-authentication asp.net-web-api
除了结构和协议之外,我想知道JWT在哪里适合客户端/服务器通信?
我有一个基于REST的服务,用户可以返回自己的书籍列表(这是一个私人列表).
该URL目前是 ../api/users/{userId}/books
每次调用时,他们还将提供先前提供的身份验证令牌.
我的问题是:
提供userIdURL冗余?当我们通过每个呼叫获得令牌时,我们可以找出正在执行呼叫的用户并返回他们的书籍列表.这userId不是严格要求的.
删除userId破解REST原则/users/books/看起来应该返回所有用户的所有书籍?
我是否应该咬住子弹并根据令牌对它们进行身份验证,然后检查令牌是否属于同一个userId?
我知道Stack Overflow上有足够的内容可以解决这个问题,但我的主题与其他主题不同.(有点相同但不相等)
我想听听社区对我所做的事情的看法,看看我是否可以在某处改进.
我目前正在为我的登录EndPoint使用BASIC授权,因为它不需要复杂性,而且它的https非常好,所以它很好.
例:
GET - /api/login
授权:基本BASE64String(用户名:密码)
我的一些EndPoints要求令牌被授予对资源的访问权限.这些令牌我通过Headers和Https-Secured发送.
问题是我没有使用传统方法来执行这些授权.以下是一些例子:
例1:
GET - /api/hardware/{PUBLIC_TOKEN}/getMe
授权 - 硬件:PRIVATE_TOKEN
此EndPoint不需要授权 - 硬件标头,但如果包含更多内容则由API完成.(这里不相关)
例2:
GET - /api/login/{id}
授权人:USER_TOKEN
否则,此EndPoint是必需的,包括具有用户令牌的授权人头,以访问资源.(请注意,生成令牌的方式与此无关)
要访问API EndPoints,必须提供HTTPS请求.
我给上面的自定义标题和EndPoints提供了任意名称,只是为了说明我的授权模式是什么,名称与原始名称不匹配.所以不要打扰模式上的foccus名称.
我的问题是:不遵循对流方式是一件坏事吗?创建自定义授权标题是不好的(如果这是为什么?).
我发现这种方式更简单,可以提供授权和传递令牌的安全方式,所有这些令牌都可以再次在平台中重新生成.
许多设备和移动应用程序已经在使用这个Schema,但它全部都在开发环境下,而且还没有生产.我担心这种非传统的方式可能会影响API的用户.希望社区的想法可以帮助我改善这一点.
编辑:26/03/2017
我想知道它是否会更好以及为什么以协议中描述的方式实现,因为当需要多个授权时比在有自定义标头并且想要检索其值时更难从Headers获取.
遵循协议,您应该使用授权标头,如下所示:
Authorization: <type> <value>
Run Code Online (Sandbox Code Playgroud)
例:
GET - /api/login/{id}
授权:用户USER_TOKEN
但是我无法看到我在这之后得到的东西,因为当获取它的值时会出现一个String或者在示例中它会返回User Token.
使用自定义标头更容易验证令牌.多种授权也会在协议方式下令人头疼.