GVKun编程网logo

在iOS Swift中提供的Uber身份验证提供了Uber无效的OAuth 2.0凭据

10

在本文中,我们将为您详细介绍在iOSSwift中提供的Uber身份验证提供了Uber无效的OAuth2.0凭据的相关知识,此外,我们还会提供一些关于@Autowire在SpringSecurity自定

在本文中,我们将为您详细介绍在iOS Swift中提供的Uber身份验证提供了Uber无效的OAuth 2.0凭据的相关知识,此外,我们还会提供一些关于@Autowire在Spring Security自定义身份验证提供程序中不起作用、c# – 如何在使用Active Directory角色和身份验证提供程序时提供ASP.NET Forms Authentication UX?、ember.js – Ember Simple Auth在身份验证后进行不同的重定向、Firebase 身份验证 Unity3d提供的身份验证凭据格式不正确或已过期的有用信息。

本文目录一览:

在iOS Swift中提供的Uber身份验证提供了Uber无效的OAuth 2.0凭据

在iOS Swift中提供的Uber身份验证提供了Uber无效的OAuth 2.0凭据

我正在我的iOS(Swift)应用中实现Uber的请求端点。Request
API /
Endpoint要求用户通过应用进行身份验证,这是doc。

为此,我正在使用此Oauth2.0库

我所做的是

  1. 借助给定的安装说明,成功地将库集成到我的项目(xCode)中。

  2. 在我的AppDelegate中

        let uber_OAuth_Settings = [    "client_id": "XXXXXXX9vtKzobvXXXXXX",    "client_secret": "EXXXXXXXXyFUNCa_Wez6AXXXXXXXnrXtxus",    "authorize_uri": "https://login.uber.com/oauth/authorize",    "token_uri": "https://login.uber.com/oauth/token",    "redirect_uris": ["jamesappv2://oauth/callback"],   // don''t forget to register this scheme    ] as OAuth2JSONvar oauth:OAuth2CodeGrant!
  1. 在我didFinishLaunchingWithOptions的Appdelegate 方法中
         oauth = OAuth2CodeGrant(settings: uber_OAuth_Settings)    oauth.viewTitle = "Uber Login Service"      // optional    oauth.verbose = true // For Logs
  1. 不要忘记注册url方案,即("redirect_uris": ["jamesappv2://oauth/callback"]

转到应用程序的目标->信息选项卡->网址类型->单击(+),附加图片

在此处输入图片说明

  1. 在下面给出的AppDelegate中添加方法并处理回调网址
        func application(application: UIApplication,    openURL url: NSURL,    sourceApplication: String?,    annotation: AnyObject?) -> Bool {        // you should probably first check if this is your URL being opened       var splitUrl = url.absoluteString!.componentsSeparatedByString(":")        if splitUrl[0] == ("jamesappv2") {            oauth.handleRedirectURL(url)        }        return true    }
  1. 现在在我的viewController中,我在myBtnClick上做到了这一点
        let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate    let url = appDelegate.oauth.authorizeURL()    UIApplication.sharedApplication().openURL(url)            appDelegate.oauth.onAuthorize = { parameters in        println("Did authorize with parameters: \(parameters)")        self.navigationController?.pushViewController(self.PersonalDriverUber_VC, animated: true)    //On Authorization Goto another ViewController using pushViewController of navigationcontroller Method    }    appDelegate.oauth.onFailure = { error in        // `error` is nil on cancel        if nil != error {            println("Authorization went wrong: \(error!.localizedDescription)")        }    }

这是我的调试日志,我得到有效的响应:

        OAuth2: Handling redirect URL jamesappv2://oauth/callback?state=4B0EB812&code=0sXXXXXXTX7yEbS1XXXXXHuw    OAuth2: Successfully validated redirect URL    OAuth2: Authorizing against https://login.uber.com/oauth/token?state=38158941&grant_type=authorization_code&code=0sXXXXXXXX1jxTrdFQT9Huw&client_secret=EIXXXXXXXNCa_Wez6XXXXXw0BlnrXtxus&client_id=fXXXXXXXy2LOUo9vtKXXXXXQ1nUDO&redirect_uri=jamesappv2%3A%2F%2Foauth%2Fcallback    OAuth2: Exchanging code 0swNXXXXX7yXXXXXXdFQT9Huw with redirect jamesappv2://oauth/callback for token at Optional("https://login.uber.com/oauth/token")    OAuth2: Did receive access token: Dfq3XXXXXXuWgpaqFXXXXXXXgXW, refresh token: EmStT7FEXHRMlS8odPzs1nsha0ObjK    Did authorize with parameters: [token_type: Bearer, expires_in: 2592000, access_token: XXXXXXOZuWgXXXXXXXXuJYOmgXW, refresh_token: EXXXXXHRMlS8oXXXXXXXa0ObjK, scope: profile, last_authenticated: 1430121470]

注意 我得到了有效的access_token

我被困在这里

按照DOC在STEP4中所说的*使用承载令牌

将响应中返回的access_token传递给类型为Bearer的Authorization标头,以代表用户发出请求。*

curl -H ''Authorization: Bearer YOUR_ACCESS_TOKEN'' ''https://api.uber.com/v1/products?latitude=37.7759792&longitude=-122.41823''

我不明白这一点。我应该如何在Bearer中传递类型为Bearer的access_token?我已经完成如下

    func callRequestAPI(url:String){        let request = appDelegate.oauth.request(forURL: NSURL(string:url)!)        request.HTTPMethod = "POST"        let postString = "product_id="+selectedUberProductId+"&start_latitude="+start_lat+"&start_longitude="+start_lng+"&end_latitude="+end_lat+"&end_longitude="+end_lng        println(postString)        let tempData: NSData = appDelegate.oauth.accessToken.dataUsingEncoding(NSUTF8StringEncoding)!        let base64LoginString = tempData.base64EncodedStringWithOptions(nil)        request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)        request.addValue("application/json", forHTTPHeaderField: "Content-Type")        request.addValue("application/json", forHTTPHeaderField: "Accept")       request.setValue("Bearer \(base64LoginString)", forHTTPHeaderField: "Authorization")        let session = NSURLSession.sharedSession()        let task = session.dataTaskWithRequest(request) { data, response, error in            if error != nil {                println("error=\(error)")                return            }            println("response = \(response)")            let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)            println("responseString = \(responseString)")        }        task.resume()    }

但我得到以下回应

    response = <NSHTTPURLResponse: 0x1a284b50> { URL: https://sandbox-api.uber.com/v1/requests } { status code: 401, headers {    "Content-Length" = 75;    "Content-Type" = "application/json";    Date = "Mon, 27 Apr 2015 10:22:01 GMT";    Server = nginx;    "Strict-Transport-Security" = "max-age=31536000; includeSubDomains; preload";    "x-uber-app" = "uberex-sandbox";    "x-xss-protection" = "1; mode=block";    } }    responseString = Optional({"message":"Invalid OAuth 2.0 credentials provided.","code":"unauthorized"})

答案1

小编典典

终于我做到了:)

我改变了下面的方法,它工作了

    func callRequestAPI(url:String){        var configuration = NSURLSessionConfiguration.defaultSessionConfiguration()        var session = NSURLSession(configuration: configuration)        let params:[String: AnyObject] = [            "product_id" : selectedUberProductId,            "start_latitude" : start_lat,            "start_longitude" : start_lng,            "end_latitude" : end_lat,            "end_longitude" : end_lng]        let request = appDelegate.oauth.request(forURL: NSURL(string:url)!)        request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")        request.HTTPMethod = "POST"        var err: NSError?        request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: NSJSONWritingOptions.allZeros, error: &err)        let task = session.dataTaskWithRequest(request) {            data, response, error in            if let httpResponse = response as? NSHTTPURLResponse {                if httpResponse.statusCode != 202 {                    println("response was not 202: \(response)")                    return                }            }            if (error != nil) {                println("error submitting request: \(error)")                return            }            // handle the data of the successful response here            var result = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.allZeros, error: nil) as! NSDictionary            println(result)            if let request_id: String = result["request_id"] as? String{                println(request_id)            }            if let driver: String = result["driver"] as? String{                println(driver)            }            if let eta: Int = result["eta"] as? Int{                println(eta)            }            if let location: String = result["location"] as? String{                println(location)            }            if let status: String = result["status"] as? String{                println(status)            }            if let surge_multiplier: Int = result["surge_multiplier"] as? Int{                println(surge_multiplier)            }            if let vehicle: String = result["vehicle"] as? String{                println(vehicle)            }        }        task.resume()    }

这是我得到的响应,我上面的方法也给出了解析

{  driver = "<null>";  eta = 15;  location = "<null>";  "request_id" = "ea39493d-b718-429f-8710-00a34dcdaa93";  status = processing;  "surge_multiplier" = 1;  vehicle = "<null>";}

请享用

@Autowire在Spring Security自定义身份验证提供程序中不起作用

@Autowire在Spring Security自定义身份验证提供程序中不起作用

我们有Spring MVC应用程序。我们正在尝试将Spring安全性集成到其中。

我们已经编写了自定义身份验证提供程序,它将执行身份验证工作。

以下是我的自定义身份验证提供程序的代码。

    public class CustomAuthenticationProvider extends DaoAuthenticationProvider {

    @Autowired
    private AuthenticationService authenticationService;

    @Override
    public Authentication authenticate(Authentication authentication) {

        CustomAuthenticationToken auth = (CustomAuthenticationToken) authentication;

        String username = String.valueOf(auth.getPrincipal());
        String password = String.valueOf(auth.getCredentials());

        try {

            Users user = new User();
            user.setUsername(username);
            user.setPassword(PasswordUtil.encrypt(password));

            user = authenticationService.validateLogin(user);

            return auth;
        } catch (Exception e) {
            throw new BadCredentialsException("Username/Password does not match for " + username);
        }
    }

    @Override
    public boolean supports(Class<? extends Object> authentication) {
        return (CustomAuthenticationToken.class.isAssignableFrom(authentication));

    }
}

在这里,我在下一行获取NullpointerException

user = authenticationService.validateLogin(user);

不会在自定义身份验证提供程序中自动连接authenticationService。虽然相同的服务authenticationService在我的MVC控制器中以相同的方式自动接线。

这是因为身份验证提供程序是Spring安全组件吗?

下面是我的web.xml

    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/spring/myApp-security.xml
    </param-value>
</context-param>

<servlet>
    <servlet-name>myApp</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/myApp-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>myApp</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

编辑1:-

我在我的spring安全配置文件中添加了以下几行。

<beans:bean id="customAuthenticationProvider">
    <beans:property name="userDetailsService" ref="userDetailsService"/>   
</beans:bean>

请帮助如何在Spring安全组件中自动连接服务类?

c# – 如何在使用Active Directory角色和身份验证提供程序时提供ASP.NET Forms Authentication UX?

c# – 如何在使用Active Directory角色和身份验证提供程序时提供ASP.NET Forms Authentication UX?

使用ASP.NET FORMS身份验证(通过此MembershipProvider System.Web.Security.ActiveDirectoryMembershipProvider)可以使用此角色提供程序AspNet WindowsTokenRoleProvider吗?

似乎只能使用< authentication mode =“Windows”&gt ;,是否可以使用FORMS? 背景 – 这里的目标是在使用Active Directory作为后端身份验证系统时提供ASP.NET Forms UX.如果使用内置技术有另外一个简单的方法,那么很好,我也想听听. 更新 我应该说,我有认证工作,我正在努力的是添加一个精细控制级别(如角色). 目前,我必须将我的Active Directory连接设置为指向我的域中的特定OU,这限制了对该OU中的物理访问权限 – 我想要将Active Directory连接指向我的整个域,以及如果我使用Windows身份验证,则可以基于组成员资格(也称为角色)限制访问,但是我希望拥有两个世界的最佳效果,这是否可能没有编写我自己的RoleProvider?

解决方法

正如其他人所提到的,您不能在AspNetwindowsTokenRoleProvider中使用ActiveDirectoryMembershipProvider.如果要使用ADMP与表单身份验证,您有几个选择:

>使用AuthorizationManager aka AzMan. – AzMan内置于Windows 2003中,可与Active Directory组进行交互.此外,还有一个.NET 2.0内置的AuthorizationStoreRoleProvider,您可以使用它与其进行交互. AzMan致力于任务,操作和角色,大概您的应用程序将被编码为对特定任务执行操作,然后可以将其分组到操作中,然后您可以创建具有执行各种操作权限的角色.安装AzMan时可以安装管理应用程序,您可以使用它们来管理任务,操作和角色.然而,AzMan有一些缺点.首先,AuthorizationStoreRoleProvider不会识别任务.相反,它将加载具有操作列表的角色列表.因此,除非您创建提供程序的自定义版本,否则您的应用程序将需要寻找操作名称而不是任务名称.其次,在最低层次上,仍然可以通过COM来进行互动,这可以是一种负担.除非您希望管理员必须使用AzMan工具,否则您需要编写自己的页面来管理角色的操作,角色和成员资格.>使用sqlRoleProvider并将角色映射到用户名.这个解决方案的优点是实现起来非常简单. RoleProvider可以使用用户名,而不是UserId,您几乎可以使用它.在您的代码中,您只需检查IsInRole来确定给定的用户是否被删除到您的代码识别的角色.显着的缺点是它仅适用于用户名,而不是AD组,因此管理员无法使用AD工具来管理用户.相反,您必须编写一个管理控制台来管理角色成员身份.此外,更改AD级别的用户名需要更新您应用程序的已知用户名列表.>写(或定位)一个尊重AD组的自定义AD RoleProvider.编写自定义角色提供程序不是为了微弱的心脏,但是这样做可以让管理员使用其现有的AD工具管理角色成员资格.

ember.js – Ember Simple Auth在身份验证后进行不同的重定向

ember.js – Ember Simple Auth在身份验证后进行不同的重定向

我在我的应用程序中使用 Ember simple auth并且它运行良好,但我遇到了一个我无法绕过的情况.

该库允许您通过覆盖routeAfterauthentication:’index’来指定成功验证后重定向到的路由.这工作正常,但是,我发现自己处于一种我希望有两种不同类型的重定向的情况.当用户首次登录时,我希望他们转到/ dashboard,但是当他们首次注册并进行身份验证时,我希望他们进行/设置.

我希望在成功创建帐户后能够执行类似的操作,但它仍在尝试使用routeAfterauthentication选项进行转换:

var _this = this;

this.set('identification',_this.get('email'));
this.set('password',password);

this.send('authenticate',function() {
  _this.transitionToRoute('settings');
},function() {});

有没有办法在一次性验证后指定要转换到哪条路线?也许有更好的方法来记录某人创建帐户后无需通过authenticate()方法?

解决方法

您可以简单地覆盖sessionAuthenticated method in the application route并实现您自己的逻辑.请注意,默认实现并不总是转换为routeAfterauthentication–如果会话中存储了先前截获的转换,则sessionAuthenticated将重试该转换.

Firebase 身份验证 Unity3d提供的身份验证凭据格式不正确或已过期

Firebase 身份验证 Unity3d提供的身份验证凭据格式不正确或已过期

如果u所使用的图形API那么它的无意义 火力的Oauth登录支持正常的Facebook登录 但不为游戏单独登录 the reason why

今天关于在iOS Swift中提供的Uber身份验证提供了Uber无效的OAuth 2.0凭据的讲解已经结束,谢谢您的阅读,如果想了解更多关于@Autowire在Spring Security自定义身份验证提供程序中不起作用、c# – 如何在使用Active Directory角色和身份验证提供程序时提供ASP.NET Forms Authentication UX?、ember.js – Ember Simple Auth在身份验证后进行不同的重定向、Firebase 身份验证 Unity3d提供的身份验证凭据格式不正确或已过期的相关知识,请在本站搜索。

本文标签: