我已經創建了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應用)的授權代碼授權流程,正如接受的答案所示。
我希望我的問題是有意義的,否則請讓我知道:)
也許identityserver是你的東西。看看這個:http://docs.identityserver.io/en/dev/index.html文檔是爲asp.net核心編寫的,但是你可以使用idsrv3。 –
您需要了解角色的想法概念,而不僅僅是授權。你的應用程序會有不同的客戶端ID。基於此,您可以在令牌中添加不同的聲明。然後,該屬性可以檢查聲明的存在,以查看此令牌是否屬於移動應用程序或MVC應用程序。 – zaitsman