AFNetworking 实现 OAuth 网络请求

关于OAuth 开放授权常用在获取身份认证和授权令牌token 获取等场景,关于OAuth更权威具体的知识介绍可参考网络资源了解。本文主要介绍了在Swift中使用AFNetworking 网络请求组件,进行OAuth请求。具体参考代码如下:

/// OAuth 网络请求
/// https://www.cnblogs.com/cui-cui/p/7107982.html
/// - Parameter strUrl: 请求s地址
/// - Parameter uname: 用户名
/// - Parameter pwd: 密码
/// - Parameter successBack: 成功回调
/// - Parameter failureBack: 失败回调
/// - Parameter isLoading: 是否显示加载动画
func oAuthRequestFor(Url strUrl:String,
                     andUsername uname:String,
                     andPassword pwd:String,
                     andSuccessBack successBack:@escaping(_ responseData:Any?)->(),
                     andFailureBack failureBack:@escaping(_ responseString:String?)->(),
                     withisLoading isLoading:Bool = true){
    
    print("请求地址:\(strUrl),参数:\(uname),\(pwd)")

    if !AppDelegate.app().isNetWork() {
        return
    }

    let _view:UIView? = UIApplication.shared.keyWindow?.rootViewController?.view
    if isLoading == true {
        DispatchQueue.main.async {
            if _view != nil {
                MBProgressHUD.showMessage("", to: _view)
            }
            else {
                MBProgressHUD.showMessage("")
            }
        }
    }

    let sessionManager = AFHTTPSessionManager.init()
    
    sessionManager.requestSerializer.setAuthorizationHeaderFieldWithUsername(uname, password: pwd)
    
    sessionManager.post(strUrl,
                        parameters: ["grant_type":"client_credentials"],
                        progress: nil,
                        success: { (sessionDataTask:URLSessionDataTask?, responseData:Any?) in

        DispatchQueue.main.async {
            if _view != nil {
                MBProgressHUD.hide(for: _view)
            }
            else {
                MBProgressHUD.hide()
            }
        }

        if let jsonObj:[String:Any] = responseData as? [String:Any] {
            //请求成功
            if K_API_IS_OK(rs: jsonObj[K_API_RESULT_CODE]) {
                successBack(jsonObj[K_API_RESULT_DATA])
            }
            else{
                successBack(jsonObj)
            }
        }
        else{
            failureBack("请求数据不存在")
        }
    }) { (sessionDataTask:URLSessionDataTask?, error:Error) in
        
        print(error.localizedDescription)
        failureBack(error.localizedDescription)

        DispatchQueue.main.async {
            if _view != nil {
                MBProgressHUD.hide(for: _view)
            }
            else {
                MBProgressHUD.hide()
            }
        }
    }?.resume()
}

示例中的userid,userpassword 是来自公司OAuth服务中申请账号而来。

以上信息就是这些,祝大家工作顺利,身体健康 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
根据提供的引用内容,可以看出为了实现OAuth2代理,可以使用反向代理和静态文件服务器,并使用提供程序(如Google,GitHub等)提供身份验证,以验证账户。在引用中提到了一个使用Docker的命令来运行OAuth2代理。而在引用中,提到了一些技术栈,包括使用Spring Boot、MyBatis Plus、TKey(OAuth2)、Swagger、Redis和Thymeleaf来构建应用程序。在引用中,给出了一个首页的Controller的示例代码,支持前后端分离,且提到了使用@RequestMapping("/")来处理请求,其中可以获取到access token。至于跨域请求oauth/token接口,由于提供的引用内容不足以提供相关信息,因此无法给出具体的解决方案。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [bitnami-docker-oauth2-proxy:用于OAuth2代理的Bitnami Docker映像](https://download.csdn.net/download/weixin_42126865/16410092)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [开源OAuth2框架 实现SSO单点登录](https://blog.csdn.net/z2926781/article/details/109022473)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追夢秋陽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值