[英]Microsoft Azure authentication with c# web api
我是Azure,C#和Web API的新手,所以首先我想提前道歉,因為這聽起來像是一個愚蠢的問題。
我只想知道在開發C#Web API和本地前端Web應用程序時是否有可能已經在使用Azure的身份驗證? 是否喜歡使用某人的Microsoft帳戶進行身份驗證?
謝謝!
編輯
因此,我已經基於此鏈接設置了應用程序: https : //docs.microsoft.com/zh-cn/azure/app-service-mobile/app-service-mobile-how-to-configure-microsoft-認證
在我的前端Web應用程序上,當用戶未通過身份驗證時,它將重定向到Microsoft的登錄頁面,當我嘗試登錄時,出現以下錯誤:
另外請注意,我還沒有將任何東西部署到Azure,我的代碼仍然是本地的,我現在只需要身份驗證。
希望有人能再次幫助我。
謝謝
UPDATE
因此,我能夠使用由某人創建的msalx庫來實現MSAL,該庫使將msal集成到Angular中成為可能。 使用我的個人Microsoft帳戶登錄后,我已經可以獲取訪問令牌,但是問題是,當我訪問Web API時,總是顯示“ 401未經授權”。
提前致謝!
根據我的理解,您正在嘗試使用其Microsoft帳戶對用戶進行身份驗證。
這是有關如何設置和啟用Web應用程序以基於Microsoft帳戶使用身份驗證的有用指南。
此外,是的,您可以在設置和配置本地應用程序后在本地對其進行測試。
這是使用Microsoft帳戶身份驗證的GitHub回購示例Web應用程序。
AFAIK,要使用App Service身份驗證/授權 ,您的C#Web API需要部署為Azure。 App Service身份驗證/授權( Easy Auth )是Azure App Service的一項功能,並實現為本機IIS模塊,該模塊在與Azure應用程序相同的沙箱中運行。 有關更多詳細信息,您可以參考《 Azure App Service身份驗證/授權的體系結構》 。
根據您的方案,您可以參考以下方法:
使用應用程序服務身份驗證/授權(簡易身份驗證)
通過瀏覽器訪問https://{your-appname}.azurewebsites.net/.auth/login/microsoftaccount
,以確保您已成功設置Web API,並且只有通過Microsoft帳戶認證的用戶才能訪問您的Web API
對於您的前端Web應用程序,您可以利用Azure移動應用程序的JavaScript客戶端庫來記錄和檢索authenticationToken
和userId
,然后可以將x-zumo-auth
請求標頭設置為帶有authenticationToken
值作為訪問您的令牌的令牌。 Web API如下:
有關如何對用戶進行身份驗證的更多詳細信息,可以參考如何:對用戶進行身份驗證 。
注意:對於本地SPA,您需要配置CORS設置,並在Azure Web應用程序的“設置>身份驗證/授權”下添加允許的外部重定向URL 。 有關更多詳細信息,您可以參考此問題 。
在您的Web API中設置身份驗證
您可以設置OAuth 2.0 Bearer身份驗證,並使用AD v2.0終結點通過人MSA和工作或學校帳戶保護Web API。 有關如何構建Web API的信息,請參閱保護MVC Web API 。
對於您的前端Web應用程序,您可以利用MSAL.js庫來記錄和檢索access_token,並使用令牌來調用Web API HTTP承載請求 。
更新:
我使用了AppModelv2-WebAPI-DotNet的TodoListService項目,然后將以下html用於我的客戶端,如下所示:
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
<meta charset="utf-8" />
<!-- IE support: add promises polyfill before msal.js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/bluebird/3.3.4/bluebird.min.js" class="pre"></script>
<script src="https://secure.aadcdn.microsoftonline-p.com/lib/0.1.1/js/msal.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
</head>
<body>
<script class="pre">
var userAgentApplication = new Msal.UserAgentApplication("b3dd78af-d9da-459d-bf01-f87104d87450", null, function (errorDes, token, error, tokenType) {
// this callback is called after loginRedirect OR acquireTokenRedirect (not used for loginPopup/aquireTokenPopup)
});
userAgentApplication.loginPopup(["user.read"]).then(function (token) {
var user = userAgentApplication.getUser();
console.log(user);
console.log('access token:' + token);
InvokeApi(token);
}, function (error) {
alert('login error:' + error);
});
function InvokeApi(token) {
$.ajax({
type: "GET",
url: "http://localhost:9184/api/values",
headers: {
'Authorization': 'Bearer ' + token,
},
}).done(function (data) {
console.log('invoked Web API \'http://localhost:9184/api/values\' with result: ' + data);
alert(data);
}).fail(function (jqXHR, textStatus) {
alert('Error getting data');
});
}
</script>
</body>
</html>
結果:
此外,您可以使用msal.js來參考具有ASP.NET后端的 git示例JavaScript單頁應用程序 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.