2017-08-15 20 views
1

我對iOS編程應用程序相當陌生。我已經深入瞭解瞭如何爲應用程序創建登錄信息。程序對我來說很清楚,但我對安全性方面有一些擔憂。如何在swift中確保身份驗證

A)應用程序正在將用戶提供的憑據發送到可以用PHP編寫的API。然後,此API將驗證憑據並將回覆發送迴應用程序。但是,這不是一個很大的安全問題?是否有可能爲每個擁有該API地址的人驗證一些憑證?

B)其次,我還沒有看到一個教程,正確加密應用程序中的憑據,然後將它們發送到api。如果他們做了加密,他們讓API來完成這項工作。在應用程序中加密它們並將加密的憑證發送到API將是一種正確的方式?我需要在我的應用程序中存儲密鑰嗎?

我在問這是因爲我想從正確的方式開始。謝謝。

回答

1

首先,我首先要說確保您的服務器已準備好SSLipv6功能。 (照顧這些權利的蝙蝠,防止你的應用程序被拒絕,當它去應用程序審查)

在保護您的api路線,你可以看看JWT token。 JWT使用密碼或證書(意思是私鑰和公鑰,想要在沒有密碼的情況下ssh到服務器時考慮)。

我寧願使用證書,但是您需要確保您不會丟失這些證書,因爲一旦您的應用準備銷售,只有這些特定的證書才允許您的應用與該api進行通話。

一旦你的API的所有路線固定,我想:

  • 產生&店默認的令牌到您應用的鑰匙扣(其目的是爲了只允許你一次訪問API)

  • 從api端創建一條路徑(/generate_token),它將讀取該默認標記,如果有效,則生成一個新標記並將其作爲響應發送。

  • 從鑰匙串中刪除該默認令牌並將該新令牌存儲在那裏。

當你的iOS應用首次推出,你可以有某種保存到你的UserDefault isAlreadyFetchedToken = false變量。這個變量允許你跟蹤你是否有新的令牌。

if isAlreadyFetchedToken == false { 
    // load the default token into some variable 
    let default_token = ... 
    // create custom http header 
    let header = ["Authorization": "Bearer \(default_token)" ] 
    // access your /generate_token route from your api 
    // if you get a response it should contain a new_token 
    // save new token into keychain && remove default one 
    // update userDefault var to true 
    isAlreadyFetchedToken = true 
} 

現在你要訪問您的API每一次,你會加載一個標記與從鑰匙圈,並把它傳遞到您的API路線例如[Authorization: "Bearer" + new_token]Authorization header

這是一種方式,而不是唯一的方式

0

的API 應該允許任何人,任何地點的請求。如果您的API允許來自任何地方的請求,並且仍然是的安全,那麼它的設計很好。如果您的API僅在與特定客戶端軟件進行通信時纔是安全的,那麼您的API設計不佳。

解決方案很簡單。使用TLS,並實施一個體面的認證系統。 JWT令牌是一個好的開始。

相關問題