public override Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context)
        {
            if (context.ClientId == _publicClientId)
            {
                Uri expectedRootUri = new Uri(context.Request.Uri, "/");

                if (expectedRootUri.AbsoluteUri == context.RedirectUri)
                {
                    context.Validated();
                }
                else if (context.ClientId == "web")
                {
                    var expectedUri = new Uri(context.Request.Uri, "/");
                    context.Validated(expectedUri.AbsoluteUri);
                }
            }

            return(Task.FromResult <object>(null));
        }
        /// <summary>
        /// Validate client redirect URI override method
        /// </summary>
        /// <param name="context">Context parmeter</param>
        /// <returns>Returns validation of client redirect URI</returns>
        public override Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context)
        {
            // Verification.
            if (context.ClientId == _publicClientId)
            {
                // Initialization.
                Uri expectedRootUri = new Uri(context.Request.Uri, "/");

                // Verification.
                if (expectedRootUri.AbsoluteUri == context.RedirectUri)
                {
                    // Validating.
                    context.Validated();
                }
            }

            // Return info.
            return(Task.FromResult <object>(null));
        }
示例#3
0
        public override Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context)
        {
            if (context.ClientId == _publicClientId)
            {
                //BEGIN MODIFIED BY JLC

                /*
                 * Uri expectedRootUri = new Uri(context.Request.Uri, "/");
                 *
                 * if (expectedRootUri.AbsoluteUri == context.RedirectUri)
                 * {
                 *  context.Validated();
                 * }
                 **/
                context.Validated();
                //TODO: Is this still compliant with oAuth 2.0?????????????????
                //END MODIFIED BY JLC
            }

            return(Task.FromResult <object>(null));
        }
        public override Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context)
        {
            if (context.ClientId == _publicClientId)
            {
                Uri expectedRootUri = new Uri(context.Request.Uri, "/oauth-success.html");

                if (expectedRootUri.AbsoluteUri == context.RedirectUri)
                {
                    context.Validated();
                }

                expectedRootUri = new Uri(context.Request.Uri, "http://localhost:3000/oauth-success.html");

                if (expectedRootUri.AbsoluteUri == context.RedirectUri)
                {
                    context.Validated();
                }
            }

            return(Task.FromResult <object>(null));
        }
示例#5
0
        /// <summary>
        /// 验证客户端RedirectUrl是否一致
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override async Task ValidateClientRedirectUriAsync(OAuthValidateClientRedirectUriContext context)
        {
            var client = await clientService.GetClientAsync(context.ClientId);

            if (client != null)
            {
                if (!string.IsNullOrEmpty(context.RedirectUri) &&
                    string.Equals(context.RedirectUri, client.RedirectUrl, StringComparison.Ordinal))
                {
                    context.Validated();
                }
                else
                {
                    context.SetError("invalid_client_redirecturi", "RedirectUri验证失败!");
                }
            }
            else
            {
                context.SetError("invalid_client", "客户端验证失败!");
            }
        }
示例#6
0
        public override Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context)
        {
            if (context.ClientId == _publicClientId)
            {
                // ET: Damit die Anwengung nicht im RootVerzeichnigs laufen muss, wurde "/" mit ApplicationPath ausgetauscht.
                // So wird dir richtige URL zurückgegeben
                Uri expectedRootUri = new Uri(context.Request.Uri, System.Web.HttpContext.Current.Request.ApplicationPath);


                if (expectedRootUri.AbsoluteUri == context.RedirectUri)
                {
                    context.Validated();
                }
                else if (context.ClientId == "web")
                {
                    var expectedUri = new Uri(context.Request.Uri, System.Web.HttpContext.Current.Request.ApplicationPath);
                    context.Validated(expectedUri.AbsoluteUri);
                }
            }

            return(Task.FromResult <object>(null));
        }
        public override Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context)
        {
            if (context.ClientId != _publicClientId) return Task.FromResult<object>(null);
            // fix issue as per mare's answer here: https://stackoverflow.com/questions/20693082/setting-the-redirect-uri-in-asp-net-identity

            var expectedRootUri = new Uri(context.Request.Uri, "/");
            // validate if we're at the root url
            if (expectedRootUri.AbsoluteUri == context.RedirectUri)
            {
                context.Validated();
            }
            else
            {   // validate if we're in a virtual directory
                expectedRootUri = new Uri(context.Request.Uri, MvcApplication.Path + "/");
                if (expectedRootUri.AbsoluteUri == context.RedirectUri)
                {
                    context.Validated();
                }
            }

            return Task.FromResult<object>(null);
        }
        public override Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context)
        {
            if (context.ClientId == _publicClientId)
            {
                Uri requestUri  = context.Request.Uri;
                Uri redirectUri = new Uri(context.RedirectUri);
                if (redirectUri.Host == requestUri.Host && "/".Equals(redirectUri.AbsolutePath, StringComparison.OrdinalIgnoreCase))
                {
                    if (!string.IsNullOrEmpty(redirectUri.Query))
                    {
                        NameValueCollection queryString = HttpUtility.ParseQueryString(redirectUri.Query);
                        string returnData = queryString["rd"];
                        if (!string.IsNullOrEmpty(returnData))
                        {
                            //TODO: check if json is valid
                            context.Validated();
                        }
                    }
                }
            }

            return(Task.FromResult <object>(null));
        }
 public override Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context)
 {
     return(Task.FromResult(0));
 }
示例#10
0
 /// <summary>
 /// 验证 redirect_uri
 /// </summary>
 public override async Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context)
 {
     context.Validated(context.RedirectUri);
 }
示例#11
0
 public static void SetCustomError(this OAuthValidateClientRedirectUriContext context, string msg)
 {
     context.Rejected();
     ResponseWrite(context.Response, msg);
 }
示例#12
0
 public override Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context)
 {
     return(base.ValidateClientRedirectUri(context));
 }
示例#13
0
 /// <summary>
 /// 验证url
 /// </summary>
 /// <param name="context"></param>
 /// <returns></returns>
 public override Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context)
 {
     Clients.AddOrUpdate(context.ClientId, context.RedirectUri, (x, y) => y);
     context.Validated(context.RedirectUri);
     return base.ValidateClientRedirectUri(context);
 }
 public Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context)
 {
     throw new NotImplementedException();
 }
示例#15
0
        /// <summary>
        /// Authorization Code、Implicitグラント種別において、
        /// AuthorizeEndpointPathを処理する場合に発生する。
        /// 以下の両方の要素を検証する処理を実装するためのメソッド。
        /// ・context.ClientId が、登録された "client_id" であること。
        /// ・context.RedirectUri が、そのクライアント用に登録された "redirect_uri" であること。
        /// </summary>
        /// <param name="context">OAuthValidateClientRedirectUriContext</param>
        /// <returns>Task</returns>
        /// <see cref="https://msdn.microsoft.com/ja-jp/library/dn385496.aspx"/>
        public override Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context)
        {
            // context.Validatedに事前登録したRedirectエンドポイントを指定して呼び出し、contextを検証完了に設定する。
            // ・ 検証完了にしなければ要求はそれ以上先には進まない。
            // ・ RFC上の記載で、RedirectEndpointのURIは、AbsoluteUriである必要があるとの記載あり。
            //    ASP.NET IdentityのチェックでAbsoluteUriである必要があるとの記載あり形式でないと弾かれる。

            // response_type
            string response_type = context.Request.Query.Get("response_type");

            if (!string.IsNullOrEmpty(response_type))
            {
                if (response_type.ToLower() == "code")
                {
                    if (!ASPNETIdentityConfig.EnableAuthorizationCodeGrantType)
                    {
                        throw new NotSupportedException(Resources.ApplicationOAuthBearerTokenProvider.EnableAuthorizationCodeGrantType);
                    }
                }
                else if (response_type.ToLower() == "token")
                {
                    if (!ASPNETIdentityConfig.EnableImplicitGrantType)
                    {
                        throw new NotSupportedException(Resources.ApplicationOAuthBearerTokenProvider.EnableImplicitGrantType);
                    }
                }
            }

            // redirect_uri
            string redirect_uri = context.RedirectUri;

            #region redirect_uriのチェック
            if (string.IsNullOrEmpty(redirect_uri))
            {
                // redirect_uriの指定が無い。

                // クライアント識別子に対応する事前登録したredirect_uriを取得する。
                redirect_uri = OAuth2ProviderHelper.GetInstance().GetClientsRedirectUri(context.ClientId, response_type);

                if (!string.IsNullOrEmpty(redirect_uri))
                {
                    // 事前登録されている。
                    if (redirect_uri.ToLower() == "test_self_code")
                    {
                        // Authorization Codeグラント種別のテスト用のセルフRedirectエンドポイント
                        context.Validated(
                            ASPNETIdentityConfig.OAuthClientEndpointsRootURI
                            + ASPNETIdentityConfig.OAuthAuthorizationCodeGrantClient_Account);
                    }
                    else if (redirect_uri.ToLower() == "test_self_token")
                    {
                        // Implicitグラント種別のテスト用のセルフRedirectエンドポイント
                        context.Validated(
                            ASPNETIdentityConfig.OAuthClientEndpointsRootURI
                            + ASPNETIdentityConfig.OAuthImplicitGrantClient_Account);
                    }
                    else
                    {
                        // 事前登録した、redirect_uriをそのまま使用する。
                        context.Validated(redirect_uri);
                    }
                }
                else
                {
                    // 事前登録されていない。
                }
            }
            else
            {
                // redirect_uriの指定が有る。

                // 指定されたredirect_uriを使用する場合は、チェックが必要になる。
                if (
                    // self_code : Authorization Codeグラント種別
                    redirect_uri == (ASPNETIdentityConfig.OAuthClientEndpointsRootURI + ASPNETIdentityConfig.OAuthAuthorizationCodeGrantClient_Manage)
                    )
                {
                    // 不特定多数のクライアント識別子に許可されたredirect_uri
                    context.Validated(redirect_uri);
                }
                else
                {
                    // クライアント識別子に対応する事前登録したredirect_uriに
                    string preRegisteredUri = OAuth2ProviderHelper.GetInstance().GetClientsRedirectUri(context.ClientId, response_type);

                    //if (redirect_uri.StartsWith(preRegisteredUri))
                    if (redirect_uri == preRegisteredUri)
                    {
                        // 完全一致する場合。
                        context.Validated(redirect_uri);
                    }
                    else
                    {
                        // 完全一致しない場合。
                        context.SetError(
                            "server_error",
                            Resources.ApplicationOAuthBearerTokenProvider.Invalid_redirect_uri);
                    }
                }
            }
            #endregion

            // 結果を返す。
            return(Task.FromResult(0));
        }
 /// <summary>
 /// 验证 redirect_uri
 /// </summary>
 public override Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context)
 {
     context.Validated(context.RedirectUri);
     return(Task.FromResult <object>(null));
 }