2017-02-11 50 views
2

我已經創建了Web API應用程序,MVC應用程序和移動應用程序。確保從MVC客戶端應用程序和移動應用程序訪問.NET Web API

Web API應儘可能與其他兩個應用程序分離。我在這裏使用密碼授權流程:使用Web API的客戶端需要使用用戶名和密碼發送POST到/Token。然後使用標準Authorization: Bearer <access_token>將返回的訪問令牌用於進一步調用API。

MVC應用程序僅適用於少數用戶,它有自己的數據庫,其中包含這些用戶的信息和角色。 MVC應用程序的某些部分應僅限於一個或兩個用戶(例如),而其他部分應可供所有註冊用戶訪問。這可以通過在MVC應用程序中的特定控制器上使用Authorize屬性來完成 - 這一切都很好。而且,MVC應用程序應該能夠與Web API交互。

其次,我想要一個移動應用程序能夠與Web API交互。這裏的一個關鍵點是我不會要求用戶在應用程序中註冊。所以基本上,(現在它是如此)API唯一看到的是「」這個令牌屬於「AndroidApp」用戶並且有密碼X - 確定的事情,你知道我,我會授予你訪問「。這在我看來有點「不安全」,這意味着移動應用程序的所有用戶將共享相同的身份驗證憑據。

問題:

  • 用戶A是誰允許訪問的MVC應用程序的用戶之一 - 我希望他通過兩個MVC應用程序,然後在Web API的認可。有沒有簡單的方法來同步兩個數據庫之間的數據,或者我應該只註冊他在兩個數據庫(一個用於MVC,一個用於API)?我可能沒有想過更好的第三種選擇。
  • 用戶B是移動應用程序的用戶,他應該而不是能夠訪問MVC應用程序。這怎麼能保證?顯然,MVC用戶數據庫不會有關於移動應用程序用戶的任何信息。我只是想知道在應用中嵌入一對認證憑證的安全性 - 對我來說聽起來不太好。

我偶然發現了this的問題,這跟我的問題基本一樣。但我並沒有真正看到Web應用(我的案例中的MVC應用)的授權代碼授權流程,正如接受的答案所示。

我希望我的問題是有意義的,否則請讓我知道:)

+0

也許identityserver是你的東西。看看這個:http://docs.identityserver.io/en/dev/index.html文檔是爲asp.net核心編寫的,但是你可以使用idsrv3。 –

+0

您需要了解角色的想法概念,而不僅僅是授權。你的應用程序會有不同的客戶端ID。基於此,您可以在令牌中添加不同的聲明。然後,該屬性可以檢查聲明的存在,以查看此令牌是否屬於移動應用程序或MVC應用程序。 – zaitsman

回答

0

我的回答並不直接回答你的問題,而是提供了一種替代。

在過去,當開發類似的解決方案時,我使用了專業的第三方身份服務Auth0

使用Auth0您可以擁有不同的應用程序密鑰,配置文件以及創建作爲身份驗證管道一部分執行的規則(webhooks)。他們提供一系列社交登錄以及AD集成。他們提供免費和付費的定價。

我不以任何方式與Auth0有任何關係,但會將他們的服務作爲任何未來項目的起點 - 是的,這是一項非常令人印象深刻的服務!

相關問題