小编典典

Jhipster + REST客户端+身份验证

spring-boot

我需要了解如何对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中捆绑的会话安全性进行身份验证。


阅读 316

收藏
2020-05-30

共1个答案

小编典典

这里是我如何实现解决方案的总结。它是真正的快速代码,但请使用它作为伪代码,因为它可能不正确。

  1. 调用您需要调用的任何方法,并向该方法传递成功的回调(块或等效方法)和失败的回调

    func action(
    URLString:String,
    method:Method,
    encoding:Encoding = .JSON,
    parameters:[String : AnyObject]?,
    success:(statusCode:Int, responseObject:AnyObject)->Void,
    failure:(statusCode:Int, error:NSError)->Void
    

    )

  2. 里面的方法es。/events您将处理特定的故障情况,即状态码为401。

     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!)
    

    }

  3. 在这种特定情况下,您无需返回结果并调用失败回调,而是调用login()方法,该方法在必要的参数之后接受原始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
    
  4. 如果认证成功

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调用的机制。

2020-05-30