2015-05-20 23 views
0

我有一個構建在hackathon starter framework(人們可以在http://hackathonstarter.herokuapp.com/上演示)頂部的node.js應用程序。在iOS和Node.js應用程序之間傳遞登錄憑證的最佳方式

我想設置一個人可以登錄iOS應用程序並使用Web應用程序數據庫。

當我登錄到應用程序時,請求正文包含以下內容,這是用於驗證用戶的內容。

body: 
    { _csrf: 'a2OrandomxnpwVOrandomp0u36randomorlv0=', 
    email: '[email protected]', 
    password: 'myPassword' }, 

我試圖使在以下格式的站點的控制檯Ajax請求,並在驗證我是成功的:

$.ajax({ 
    type:"POST", 
    url:"/login", 
    data: { _csrf: 'a2OrandomxnpwVOrandomp0u36randomorlv0=', 
    email: '[email protected]', 
    password: 'myPassword' }, 
    dataType:"json", 
    success:function(response){ 
     console.log(response) 
    } 
}); 

從這個我已經得出結論(希望正確),在爲了接受來自外部應用程序的請求,請求必須包含一個有效的_csrf標記,這會導致我的問題iOS應用程序的請求將是什麼樣子,以及它將在哪裏獲得將對我的應用程序有效的csrf標記?

的問題是類似以下內容:

How to get CSRF token in iOS?

+0

我想看看Oauth 2 –

+0

@RyanBerg我的應用程序使用Oauth 2.0 https://github.com/sahat/hackathon-starter/blob/master/package.json – maudulus

回答

1

黑客馬拉松入門框架看起來像是專爲基於瀏覽器的Web應用程序,而不是通用的Web API請求。對於你想要做的,你想要使用基於API的身份驗證(基本身份驗證是最簡單的,而this看起來像是一個很好的教程,將它添加到Hackathon使用的express)。

如果你想按原樣使用現有的框架,你必須在iOS端做一些工作。從你提供的鏈接,它看起來像框架傳遞CSRF令牌的HTML標籤<meta>在登錄頁上:

<meta name="csrf-token" content="9XLjTtpT6jf/HsrXT94GHOeFS4NIgQUTuPpfw=">

在iOS應用程序,你必須首先做出的請求登錄頁面,從meta標籤刮取CSRF標記,並在使用_csrf變量發出POST請求時使用該標記。

不幸的是,我不熟悉iOS以及如何爲請求編寫代碼,但最終結果與您上面生成的jQuery示例類似。

+0

如果Web應用程序有一個端點,那麼iOS應用程序可以去,它只會返回元內容令牌? – maudulus

+0

沒有嘗試自己,這聽起來像它會起作用。你必須添加你自己的視圖,只生成CSRF值(看起來他們正在使用Jade模板)。我相信'_csrf'是一個可以被他們的視圖使用的局部變量(看看他們如何產生'meta'標籤[這裏](https://github.com/sahat/hackathon-starter/blob/master /views/layout.jade))。 – gregnr

+0

另一種解決方法是將CSRF發送到標題中,這樣您就不必颳去它了。看起來他們使用[lusca](https://github.com/krakenjs/lusca)庫,它實際上聲稱提供CSRF頭文件(請參閱評論[here](https://github.com/krakenjs/lusca/blob/)主/ LIB/CSRF。js#L13)),但實際上並沒有這樣做(它只是接受這些頭文件,不會產生它們)。所以你必須在某個地方實現它。 – gregnr

相關問題