2017-08-26 97 views
2

我是Azure,C#和Web API的新手,所以首先我想提前道歉,因爲這可能聽起來像一個愚蠢的問題。用c#web api進行Microsoft Azure驗證

我只想知道,在開發我的C#Web API和我的前端Web應用程序本地時,是否有可能我已經在使用Azure的身份驗證了?像使用某人的Microsoft帳戶進行身份驗證一樣?

謝謝!

編輯

所以我已經建立了基於此鏈路上的應用: https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-how-to-configure-microsoft-authentication

在當用戶沒有通過驗證它被重定向到微軟的登錄頁面,我的前端Web應用程序,當我試圖登錄我得到的錯誤如下:

enter image description here

一同時請注意,我還沒有部署任何Azure,但我的代碼仍然是本地的,我現在只需要進行身份驗證。

希望有人可以再次幫助我。

感謝

UPDATE

所以我能夠通過使用別人這使得它能夠在MSAL角整合創造了msalx庫來實現MSAL。使用我的個人Microsoft帳戶登錄後,我已經可以獲取訪問令牌,但是問題在於,當我訪問我的Web API時,它總是說401未經授權。

在此先感謝!

enter image description here

回答

1

據我所知,使用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用於記錄和檢索authenticationTokenuserId,那麼你可以用價值authenticationToken作爲標記設置x-zumo-auth請求頭用於訪問您的Web API如下:

    enter image description here

    有關如何驗證用戶的詳細信息,你可以參考How to: Authenticate users

    注:對於當地的SPA,你需要配置CORS設置並添加下你的蔚藍的Web應用程序的「設置>身份驗證/授權」允許使用外線導向網址。有關更多詳細信息,請參閱issue

設置驗證您的Web API中

  • 你可以設置你的OAuth 2.0認證承載與AD V2.0端點,你可以用兩個人MSA保護您的Web API和工作或學校帳戶。關於如何構建Web API,可以參考Secure an MVC web API

  • 爲了您的前端Web應用程序,你可以利用MSAL.js庫,用於記錄和檢索的access_token,並使用令牌調用您的Web API HTTP bearer request

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> 

結果:

enter image description here

此外,你可以參考這個混帳示例JavaScript Single Page Application with an ASP.NET backend, using msal.js

+0

所以實質上,我只能使用Azure的身份驗證,如果我的API或應用程序已經部署在那裏?有沒有一種方法可以在不使用Azure的情況下使用他們的Microsoft帳戶對用戶進行身份驗證? – Jed

+1

對於內置Easy Auth功能,您現在只能在Azure上使用它。根據您的要求,您可以利用選項2,然後您的web api可以運行而無需部署到Azure。您可以按照上述教程構建您的web api,並使用MSAL.js進行MSA身份驗證,然後使用令牌訪問您的web api。 –

+0

好吧,這意味着在開發Web應用程序時,我不需要在Azure中進行訂閱,這些Web應用程序稍後將在那裏部署?順便說一句,謝謝你的回答,它澄清了我的要求。我將與第二個選項一起去。 – Jed

2

根據我的理解,你想驗證他們的Microsoft帳戶的用戶。

以下是有關如何設置和啓用Web應用程序以使用基於Microsoft帳戶的身份驗證的有用指南。

https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-how-to-configure-microsoft-authentication

此外,它可以設置和配置您的本地應用程序後,在本地測試它是。

這是一個GitHub回購示例web應用程序,它使用Microsoft帳戶驗證。

https://github.com/lexdevel/MicrosoftAccountAuthentication

+0

嗨,謝謝你的回答我編輯了我的問題。請參見。謝謝 – Jed

相關問題