c# - management - La URL de respuesta de Azure Active Directory no funciona como se esperaba
portal azure web (2)
No está proporcionando detalles sobre su implementación, pero aquí hay una solución para cualquier caso.
Podría estar usando la configuración de WIF, que es completamente la configuración en su web.cofing, o podría estar usando OWIN, donde la configuración está en su archivo Config.Auth.cs De cualquier manera, el STS de Azure AD solo usará el URI de respuesta predeterminado, independientemente de dónde provengan las llamadas. Debe configurar explícitamente ReplyUrl para indicar a Azure AD que devuelva al usuario a una de las URL de respuesta registradas .
Solución WIF
Cuando usa WIF, su configuración web contiene la siguiente sección:
<system.identityModel.services>
<federationConfiguration>
<cookieHandler requireSsl="true" />
<wsFederation passiveRedirectEnabled="true"
issuer="https://login.windows.net/yourtenant.com/wsfed"
realm="https://yourtenant.com/WebSingleTenant"
requireHttps="true" />
</federationConfiguration>
</system.identityModel.services>
que es un poco incompleto! Puede agregar una reply
a la etiqueta wsFederation
para indicar a Azure AD la nueva URL de respuesta:
<wsFederation passiveRedirectEnabled="true"
issuer="https://login.windows.net/yourtenant.com/wsfed"
realm="https://yourtenant.com/WebSingleTenant"
reply="http://any_registered_url/"
requireHttps="true" />
Tenga en cuenta que aquí solo puede utilizar una URL de respuesta registrada .
Para modificar el atributo de respuesta, puede usar con seguridad las transformaciones de web.config como lo hace para todas las demás configuraciones de la aplicación y la cadena de conexión específicas de su implementación.
Solución OWIN
Cuando use OWIN, tendrá el archivo Startup.Auth.cs
, o su configuración de autenticación estará directamente en su archivo Startup.cs
. Se vería algo como lo siguiente:
public void ConfigureAuth(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.
AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUri
});
}
Tenga en cuenta los ajustes de configuración para la autenticación OpenIdConnect. Puede agregar una propiedad RedirectUri
para indicar dónde redirigir al usuario a:
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUri,
RedirectUri = "any_registered_redirect_uri"
});
Puede asignar RedirectUri a una configuración en el archivo Web.Config, que también podrá manejar utilizando las transformaciones de Web.Config.
He especificado dos URL en la URL de respuesta de configuración del sitio web de Azure Active Directory. Una para redirigir a mi entorno localhost cuando estoy ejecutando un código local y otra para redirigir a mi sitio web alojado en Azure cuando estoy ejecutando el sitio web prod. Pero el directorio activo de Azure parece estar ignorando la configuración. Solo usa una u otra URL pero no ambas. Vi un enlace que describe el problema y una posible solución, pero no funcionó para mí. El enlace es:
http://samritchie.net/2013/07/17/azure-ad-single-sign-on-with-multiple-environments-reply-urls/
¿Cómo configuro Azure Active Directory para redirigir al entorno apropiado?
Para el caso de OWIN tengo la siguiente solución de configuración.
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUri
#if !DEPLOY
,RedirectUri = "https://localhost:44369/"
#endif
});
Por lo tanto, utiliza una redirección local cuando no estoy creando para la implementación. El proyecto está configurado para declarar DEPLOY para la versión que estoy creando para la implementación. De esa manera, utiliza la URL de redireccionamiento predeterminada configurada en Azure.