【问题标题】:ASP.NET application Authentication on AzureAzure 上的 ASP.NET 应用程序身份验证
【发布时间】:2017-11-23 16:16:06
【问题描述】:

所以,我有这个以前使用 Windows 身份验证方案的旧版 ASP.NET 应用程序。

我现在正在尝试将其移植到 Azure,并且已经在 azure 门户上配置了 Azure Active Directory 服务,并且我的组织的目录已经在 Azure 上。

我现在想更改 web.config 文件,以便我的应用识别 Azure 身份验证并使用这些凭据。

以前,配置是这样的

  <system.web>
  <compilation debug="true" targetFramework="4.6"/>
  <httpRuntime targetFramework="4.5" maxQueryStringLength="2097151" requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,\,?"/>
  <customErrors mode="Off"/>
  <authentication mode="Windows"/>

我应该将身份验证 模式更改为什么?

非常感谢!

【问题讨论】:

    标签: c# asp.net azure authentication


    【解决方案1】:

    据我所知,如果您启用了 Web 应用程序的身份验证/授权 AD 登录,如下所示。

    您无需更改任何代码。如果用户想要访问您的 Web 应用程序,Azure 会自动将用户重定向到 AD 登录页面。

    如果用户登录成功,那么它会返回一个token给你的应用,在这个token中包含了用户的信息。


    更新:

    我建议你可以使用 azure ad graph api 来获取用户信息。

    如果您想使用 azure ad graph api,您需要获取访问令牌。

    我建议你可以先访问这个url

    使用搜索栏搜索您的网络、移动或 API 应用。

    单击编辑以启用更改。

    将 additionalLoginParams 设置为以下内容:

    ["response_type=code id_token", "resource=https://graph.windows.net"]
    

    单击页面顶部的读/写按钮以启用更改。

    单击 PUT 按钮保存更改。

    结果如下:

    然后您可以在您的应用程序中添加以下代码以发送带有令牌的请求以获取用户信息。

     string accessToken = this.Request.Headers[
     "X-MS-TOKEN-AAD-ACCESS-TOKEN"];
            // Call into the Azure AD Graph API using HTTP primitives and the
            // Azure AD access token.
            var url = "https://graph.windows.net/me?api-version=1.6";
            var request = WebRequest.CreateHttp(url);
            var headerValue = "Bearer " + accessToken;
            request.Headers.Add(HttpRequestHeader.Authorization, headerValue);
    
            using (var response = request.GetResponse())
    
    
            using (var streamReader = new StreamReader(response.GetResponseStream()))
            {
                string jsonResponse = streamReader.ReadToEnd();
                Response.Write(jsonResponse);
            }
    

    此url用于获取当前用户信息。

    https://graph.windows.net/me?api-version=1.6
    

    如果你想获取用户的组,我建议你可以改变如下的url:

    https://graph.windows.net/myorganization/me/$links/memberOf?api-version
    

    关于这个api的更多细节,你可以参考这个article

    如果您想获取用户的头像,我建议您可以更改网址如下:

    https://graph.windows.net/myorganization/me/thumbnailPhoto?api-version
    

    更多细节,你可以参考这个article

    注意:您需要在您的网络应用中授予足够的权限才能获取这些值。

    像这样的图像:

    【讨论】:

    • 我已经这样做了,但我想知道如何将该令牌放入我的应用程序中,以便检索用户所属的安全组、个人资料图片等信息。
    • 我已经更新了我的答案,我建议你可以向AD图发送请求以获取用户信息。
    • 感谢您的详细解答。我会试试看。
    • 我尝试了上述方法,但出现 403 错误。这是我的代码。我确认我从 Header 中获得了一个令牌。我什至能够使用它来获取 User 对象,但获取组却没有运气。 var url = "graph.windows.net/myorganization/me/$links/…";配置加载错误。远程服务器返回错误:(403) Forbidden。应用程序加载错误。配置加载错误。远程服务器返回错误:(403) Forbidden.
    猜你喜欢
    • 2022-10-25
    • 1970-01-01
    • 2022-08-08
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    相关资源
    最近更新 更多