Мой код входит в бесконечный цикл, попадает на страницу входа Azure (размещается в Microsoft), затем перенаправляется обратно в мое приложение, затем обратно на страницу входа MS host и т. Д. И т. Д. И т. П.
В моем коде естьточка останова в событии OnAuthorizationCodeReceived
...
public void ConfigureAzureAd(IServiceCollection services)
{
//set authentication to use Azure AD
services.AddAuthentication(auth =>
{
auth.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
auth.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
auth.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie()
.AddOpenIdConnect(opts =>
{
Configuration.GetSection("OpenIdConnect").Bind(opts);
opts.Events = new OpenIdConnectEvents
{
OnAuthorizationCodeReceived = async ctx =>
{
HttpRequest request = ctx.HttpContext.Request;
//We need to also specify the redirect URL used
string currentUri = UriHelper.BuildAbsolute(request.Scheme, request.Host, request.PathBase, request.Path);
//Credentials for app itself
var credential = new ClientCredential(ctx.Options.ClientId, ctx.Options.ClientSecret);
//Construct token cache
ITokenCacheFactory cacheFactory = ctx.HttpContext.RequestServices.GetRequiredService<ITokenCacheFactory>();
TokenCache cache = cacheFactory.CreateForUser(ctx.Principal);
var authContext = new AuthenticationContext(ctx.Options.Authority, cache);
//Get token for Microsoft Graph API using the authorization code
string resource = "https://graph.microsoft.com";
AuthenticationResult result = await authContext.AcquireTokenByAuthorizationCodeAsync(
ctx.ProtocolMessage.Code, new Uri(currentUri), credential, resource);
//Tell the OIDC middleware we got the tokens, it doesn't need to do anything
ctx.HandleCodeRedemption(result.AccessToken, result.IdToken);
//ctx.HandleCodeRedemption();
}
};
});
}
, и я могу проверить данные в result
, и все это выглядит нормально (хотя и не уверен, как будет выглядеть сбой), похоже,вход в систему работает, но мое приложение не может распознать, что вход в систему произошел или не сохраняется, и продолжает повторять попытку
Я также попросил кого-то еще попробовать войти в систему с пользователем, которого нет в моем Active Directory,и, соответственно, происходит сбой, действительно похоже, что Active Directory счастлива, но мое приложение просто перенаправляет.
Я использую .Net Core 2.2 (мой первый основной проект)
Яс помощью Active Directory Free
Обновление в ответ на @Marilee Turscak - MSFT
Если у меня нет правильной настройки URL-адреса ответа в portal.azure.com и передается вэто через C #, то лазурь бросает еrror, так что у меня определенно есть ответный URL, и он соответствует
Конфиг выглядит так:
"OpenIdConnect": {
"ClientId": "<guid in here>", // Application ID
"ClientSecret": "<secrect from portal.azure.com>",
"Authority": "https://login.microsoftonline.com/emailwithout@symbol.onmicrosoft.com/",
"PostLogoutRedirectUri": "http://www.<projectname_in_here>.local",
"CallbackPath": "/signin-oidc",
"ResponseType": "code id_token"
}