代码之家  ›  专栏  ›  技术社区  ›  MovGP0

将IdentityServer4与Azure Active Directory连接

  •  1
  • MovGP0  · 技术社区  · 9 年前

    Appication ID 还配置了一个 API Key 此外,我有一个端点列表:

    https://login.windows.net/{ad_guid}/federationmetadata/2007-06/federationmetadata.xml
    https://login.windows.net/{ad_guid}/wsfed
    https://login.windows.net/{ad_guid}/saml2
    https://login.windows.net/{ad_guid}/saml2
    https://graph.windows.net/{ad_guid}
    https://login.windows.net/{ad_guid}/oauth2/token
    https://login.windows.net/{ad_guid}/oauth2/authorize
    

    https://login.windows.net/{ad_guid}/.well-known/openid-configuration
    

    documentation from Microsoft 我现在应该这样配置端点:

    app.SetDefaultSignInAsAuthenticationType(
        CookieAuthenticationDefaults.AuthenticationType);
    
    app.UseCookieAuthentication(new CookieAuthenticationOptions());
    
    var uri = "https://login.windows.net/{0}";
    var instance = configuration["AzureAD:Instance"];
    var authority = string.Format(CultureInfo.InvariantCulture, uri, instance);
    
    app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
    {
        DisplayName = "Azure Active Directory",
        AuthenticationScheme = "AzureAD",
        SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme,
        ClientId = configuration["AzureAD:AppId"],
        Authority = authority, 
        Scope = {"openid", "email"}
    });
    

    出于某种原因,这不起作用。你知道我错过了什么吗?

    1 回复  |  直到 9 年前
        1
  •  1
  •   MovGP0    9 年前

    显然,我几乎是对的。以下是我的解决方案:

    JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
    
    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        AuthenticationScheme = 
            IdentityServerConstants.DefaultCookieAuthenticationScheme,
        AutomaticAuthenticate = true,
        AutomaticChallenge = true
    });
    
        public static OpenIdConnectOptions CreateAzureAdOptions(X509Certificate2 certificate2, IConfiguration configuration)
        {
            return new OpenIdConnectOptions
            {
                DisplayName = "Azure Active Directory",
                AuthenticationScheme = "Azure",
                ClientId = configuration["OpenId:AzureAD:AppId"],
                Authority = string.Format(CultureInfo.InvariantCulture, "https://login.windows.net/{0}", configuration["OpenId:AzureAD:Instance"]),
                TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer = false
                },
                // https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-token-and-claims
                Scope = {"openid", "email", "roles", "groups"},
                Events = new OpenIdConnectEvents
                {
                    OnRemoteFailure = context => HandleRemoteFailure(context)
                },
                SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme
            };
        }
    
        private static Task HandleRemoteFailure(FailureContext context)
        {
            Log.Error(context.Failure, "Azure AD Remote Failure");
            context.Response.Redirect("/accessdenied");
            context.HandleResponse();
            return Task.FromResult(0);
        }