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)); }
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)); }
/// <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", "客户端验证失败!"); } }
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)); }
/// <summary> /// 验证 redirect_uri /// </summary> public override async Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context) { context.Validated(context.RedirectUri); }
public static void SetCustomError(this OAuthValidateClientRedirectUriContext context, string msg) { context.Rejected(); ResponseWrite(context.Response, msg); }
public override Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context) { return(base.ValidateClientRedirectUri(context)); }
/// <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(); }
/// <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)); }