簡體   English   中英

使用C#Web API的Microsoft Azure身份驗證

[英]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,該庫使將m​​sal集成到Angular中成為可能。 使用我的個人Microsoft帳戶登錄后,我已經可以獲取訪問令牌,但是問題是,當我訪問Web API時,總是顯示“ 401未經授權”。

提前致謝!

在此處輸入圖片說明

根據我的理解,您正在嘗試使用其Microsoft帳戶對用戶進行身份驗證。

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

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

此外,是的,您可以在設置和配置本地應用程序后在本地對其進行測試。

這是使用Microsoft帳戶身份驗證的GitHub回購示例Web應用程序。

https://github.com/lexdevel/MicrosoftAccountAuthentication

AFAIK,要使用App Service身份驗證/授權 ,您的C#Web API需要部署為Azure。 App Service身份驗證/授權( Easy Auth )是Azure App Service的一項功能,並實現為本機IIS模塊,該模塊在與Azure應用程序相同的沙箱中運行。 有關更多詳細信息,您可以參考《 Azure App Service身份驗證/授權的體系結構》

根據您的方案,您可以參考以下方法:

使用應用程序服務身份驗證/授權(簡易身份驗證)

  • 配置您的App Service應用程序以使用Microsoft帳戶登錄

  • 通過瀏覽器訪問https://{your-appname}.azurewebsites.net/.auth/login/microsoftaccount ,以確保您已成功設置Web API,並且只有通過Microsoft帳戶認證的用戶才能訪問您的Web API

  • 對於您的前端Web應用程序,您可以利用Azure移動應用程序JavaScript客戶端庫來記錄和檢索authenticationTokenuserId ,然后可以將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-DotNetTodoListService項目,然后將以下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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM