使用Azure Active Directory配置用于身份验证的云服务

时间:2016-09-26 11:11:11

标签: azure authentication azure-active-directory azure-cloud-services

我有一个单一的租户云服务,我想只能访问我公司的员工。该解决方案具有Web角色和辅助角色。

的Web.Config

<add key="ida:Tenant" value="MyCompany.onmicrosoft.com" />
<add key="ida:Audience" value="https://MyCompany.onmicrosoft.com/MySolutionWebRole" />
<add key="ida:ClientID" value="44421xxx-xxxx-xxxx-xxxx-xxxxxxx7024" />
<add key="ida:Password" value="i6fMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx4Yk=" />
<add key="ida:AADInstance" value="https://login.microsoftonline.com/{0}" />
<add key="ida:PostLogoutRedirectUri" value="https://localhost:44322/" />

另外,我在Cloud.config中获得了相同的设置:

<Setting name="ida.Tenant" value="MyCompany.onmicrosoft.com" />
<Setting name="ida.Audience" value="https://MyCompany.onmicrosoft.com/MySolutionWebRole" />
<Setting name="ida.ClientID" vvalue="44421xxx-xxxx-xxxx-xxxx-xxxxxxx7024" />
<Setting name="ida.Password" value="i6fMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx4Yk=" />
<Setting name="ida.AADInstance" value="https://login.microsoftonline.com/{0}" />
<Setting name="ida.PostLogoutRedirectUri" value="https://localhost:44322/" />

转到Startup.Auth.cs

   public void ConfigureAuth(IAppBuilder app)
    {
        string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant);
        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
        app.UseCookieAuthentication(new CookieAuthenticationOptions());    
        app.UseOpenIdConnectAuthentication(
                new OpenIdConnectAuthenticationOptions
                {
                    ClientId = clientId,
                    Authority = authority,
                    PostLogoutRedirectUri = postLogoutRedirectUri,
                    RedirectUri = postLogoutRedirectUri,

                    Notifications = new OpenIdConnectAuthenticationNotifications
                    {
                        AuthenticationFailed = context =>
                        {
                            context.HandleResponse();
                            context.Response.Redirect("/Error?message=" + context.Exception.Message);
                            return Task.FromResult(0);
                        }
                    }

                });
        }

最后,我在控制器中设置了[Authorize]标签。

在Azure Active Directory设置中,我已经注册了我的cloudservice。 应用程序类型是Web app / API,Multi-tenanted是“No”。注销网址设置为https://localhost:44322/Account/EndSession。我没有更改或编辑Manifest。 enter image description here enter image description here

当我尝试进入云端服务时,我被重定向到我的组织登录页面(到目前为止一直都很好),但输入密码后我收到了一条错误消息。

我们在登录时遇到问题。我们收到了非法请求。 (自由翻译)

  

相关ID:21f4089f-1952-4f57-aead-173a66c1408d时间戳:   2016-09-26 10:24:14Z AADSTS90093:此应用程序需要   应用程序权限到另一个应用同意   应用程序权限只能由管理员执行。   退出并以管理员身份登录或与您联系   组织的管理员。

登录请求的网址如下(我输入密码的地方);

  

https://login.microsoftonline.com/ fd2xxxxx-xxxx-xxxx-xxxxxxxf3f2 /   的oauth2 /授权?CLIENT_ID = 444xxxxx-XXXX-XXXX-xxxxxxxx024   &安培; REDIRECT_URI = HTTPS%3A%2F%2flocalhost%3a44322%2F   &amp; response_mode = form_post&amp; response_type = code + id_token   &安培;范围= +的OpenID轮廓&安培;状态= OpenIdConnect.AuthenticationProperties   %3dYkxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

我一直在寻找基于Web应用程序的两个示例解决方案 https://github.com/Azure-Samples/active-directory-dotnet-webapp-openidconnecthttps://github.com/Azure-Samples/active-directory-dotnet-webapp-multitenant-openidconnect

我非常感谢你对这件事的任何帮助

1 个答案:

答案 0 :(得分:0)

Turnes out我必须在Azure Active Directory App注册中编辑我的清单:

"requiredResourceAccess": [
    {
      "resourceAppId": "00000002-0000-0000-c000-000000000000",
      "resourceAccess": [
        {
          "id": "311a71xxxx-xxxx-xxxx-xxxx7156d8e6",
          "type": "Scope"
        },
        {
          "id": "5778995axxxx-xxxx-xxx-xxxx63a9f3f4d04",
          "type": "Role"
        }

当我删除最后一个条目(角色,可能是工作者角色)时,我有一个屏幕提示我是否要授予Azure AD配置文件的应用程序读取权限。在回答OK后,我被转发到localhost:44322,带有404.解决方法是从配置文件中删除postLogoutRedirectUri键,以及删除Startup.Auth.cs中的两行

//PostLogoutRedirectUri = postLogoutRedirectUri,
//RedirectUri = postLogoutRedirectUri,

现在它按预期工作:)