我需要了解如何对REST客户端进行身份验证(可以是Paw,可以是android应用程序,也可以是将AFNetworking与jHipster结合使用的iOs应用程序,我认为更笼统地说是Spring Boot,我不是专家)。
虽然我能够在登录浏览器时获得令牌,并随后在以下请求中使用此令牌,但我不了解如何首先使用RESTful最佳实践进行身份验证。
例如,在Paw.app中,我可以通过基本身份验证或Oauth2,但我不了解如何像在Web浏览器上那样简单地获取会话令牌。
同样,在AFNetworking中,我可以通过基本身份验证,例如
NSString*auth=[NSString stringWithFormat:@"%@:%@", @"admin", @"admin"]; NSString *authValue = [NSString stringWithFormat:@"Basic %@", [auth base64EncodedString]]; [manager.requestSerializer setValue:authValue forHTTPHeaderField:@"Authorization"];
但是我很难理解如何使用jHipster / spring boot中捆绑的会话安全性进行身份验证。
这里是我如何实现解决方案的总结。它是真正的快速代码,但请使用它作为伪代码,因为它可能不正确。
调用您需要调用的任何方法,并向该方法传递成功的回调(块或等效方法)和失败的回调
func action( URLString:String, method:Method, encoding:Encoding = .JSON, parameters:[String : AnyObject]?, success:(statusCode:Int, responseObject:AnyObject)->Void, failure:(statusCode:Int, error:NSError)->Void
)
里面的方法es。/events您将处理特定的故障情况,即状态码为401。
/events
if(r!.statusCode==ResponseCodes.HTTP_UNAUTHORIZED.rawValue){ loginAndAction(URLString, method: method, encoding: encoding, parameters: parameters, success: success, failure: failure)
}else{
failure(statusCode: response.response!.statusCode, error:response.result.error!)
}
在这种特定情况下,您无需返回结果并调用失败回调,而是调用login()方法,该方法在必要的参数之后接受原始success()回调
success()
func loginAndAction( URLString:String, method:Method, encoding: Encoding, parameters:[String:AnyObject]?, success:(statusCode:Int, responseObject:AnyObject)->Void, failure:(statusCode:Int, error:NSError)->Void )->Void
如果认证成功
var d:[String:AnyObject] = response.result.value as! [String:AnyObject] self.authToken = d["access_token"] as! String action(URLString, method: method,encoding:encoding, parameters: parameters, success: success, failure: failure)
此时,方法操作可以使用适当的工作令牌。
这应该每天仅发生一次(基于令牌到期),这是适用于oauth2 refresh_token调用的机制。
refresh_token