據我所知,使用App Service Authentication/Authorization,你的C#的Web API需要部署到Azure上。應用程序服務身份驗證/授權(簡易身份驗證)是Azure應用程序服務的一項功能,可作爲與您的天青應用程序在同一個沙箱中運行的本機IIS模塊實施。有關更多詳細信息,請參閱Architecture of Azure App Service Authentication/Authorization。通過
使用應用服務的身份驗證/授權(簡單驗證)
訪問https://{your-appname}.azurewebsites.net/.auth/login/microsoftaccount
:
根據您的情況,您可以參考以下方法以確保您已成功設置您的Web API,並且只有通過Microsoft帳戶驗證的用戶才能訪問y我們的Web API
爲了您的前端Web應用程序,你可以充分利用JavaScript client library for Azure Mobile Apps用於記錄和檢索authenticationToken
和userId
,那麼你可以用價值authenticationToken
作爲標記設置x-zumo-auth
請求頭用於訪問您的Web API如下:
有關如何驗證用戶的詳細信息,你可以參考How to: Authenticate users。
注:對於當地的SPA,你需要配置CORS設置並添加下你的蔚藍的Web應用程序的「設置>身份驗證/授權」允許使用外線導向網址。有關更多詳細信息,請參閱issue。
設置驗證您的Web API中
UPDATE:
我用TodoListService項目從AppModelv2-WebAPI-DotNet,然後用下面的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>
結果:
此外,你可以參考這個混帳示例JavaScript Single Page Application with an ASP.NET backend, using msal.js。
所以實質上,我只能使用Azure的身份驗證,如果我的API或應用程序已經部署在那裏?有沒有一種方法可以在不使用Azure的情況下使用他們的Microsoft帳戶對用戶進行身份驗證? – Jed
對於內置Easy Auth功能,您現在只能在Azure上使用它。根據您的要求,您可以利用選項2,然後您的web api可以運行而無需部署到Azure。您可以按照上述教程構建您的web api,並使用MSAL.js進行MSA身份驗證,然後使用令牌訪問您的web api。 –
好吧,這意味着在開發Web應用程序時,我不需要在Azure中進行訂閱,這些Web應用程序稍後將在那裏部署?順便說一句,謝謝你的回答,它澄清了我的要求。我將與第二個選項一起去。 – Jed