0

正常に動作する Azure AD 認証を構築しています。唯一の問題は、ユーザーが認証されていない場合に host.com/xxx/bbb のようなリンクをクリックすると、ルートにリダイレクトされることです。

ブラウザに入力した元の URL にリダイレクトする必要があります。これは達成できますか?以下は、アプリの起動時に使用するコードのスニペットです。

    public void ConfigureAuth(IAppBuilder app)
    {
        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
        app.UseCookieAuthentication(new CookieAuthenticationOptions());
        app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                ClientId = XXX,
                Authority = string.Format("https://login.microsoftonline.com/{0}", YYY,

                Notifications = new OpenIdConnectAuthenticationNotifications
                {
                    RedirectToIdentityProvider = async n => { await Task.Run(() => SetRedirectUrl(n)); }
                }
            });
    }

private static void SetRedirectUrl(RedirectToIdentityProviderNotification<OpenIdConnectMessage, OpenIdConnectAuthenticationOptions> notification)
    {
        notification.ProtocolMessage.RedirectUri = notification.Request.Uri.AbsoluteUri;
    }

OwinRequest のどのプロパティにも、探しているフル パスが含まれていません。私も見てみました

HttpContext.Current.Request.Url

しかし、これにも完全なアドレスはありません。

4

1 に答える 1

0

ブラウザに入力した元の URL に引き続きリダイレクトする必要があります

SignIn()AccountController.cs でメソッドを設定する必要があります。「Request.UrlReferrer.ToString();」を使用できます。入力した URL を取得するには:

public void SignIn()
        {

            // var host = Request.UserHostName.ToString();
            var ori = Request.UrlReferrer.ToString();
            var index = ori.LastIndexOf('/');
            var action = ori.Substring(index);
            // Send an OpenID Connect sign-in request.
            if (!Request.IsAuthenticated)
            {
                HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = action },
                    OpenIdConnectAuthenticationDefaults.AuthenticationType);
            }
        }

于 2018-11-27T03:13:22.413 に答える