2017-09-07 13 views
2

OnCreatingTicketイベント中にoAuthが失敗するようにしたいとします。私は.Failを呼び出すことはできますが、何もしないようです。ワークフローが遅すぎますか?実際に障害を処理するための追加コードがありませんか?AddOAuth OnCreatingTicket中にAuthenticateResult.Fail結果を返します。

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) 
    .AddCookie().AddOAuth("schemename", SetOAuthOptions); 

private void SetOAuthOptions(OAuthOptions options) 
{ 
    options.ClientId = ...; 
    options.ClientSecret = ...; 
    options.CallbackPath = ...; 
    options.AuthorizationEndpoint = ...; 
    options.TokenEndpoint = ...; 
    options.Events = new OAuthEvents 
    { 
     OnCreatingTicket = async context => await AddIdentityClaimsAsync(context), 
     OnTicketReceived = ... 
    }; 
} 

private async Task AddIdentityClaimsAsync(OAuthCreatingTicketContext context) 
{ 
    ... 
    if(noAccess) 
     context.Fail("Sorry, you don't have access to the product."); 
} 
+0

これは何かを考え出しましたか?私は同様の状況に陥っています。外部プロバイダからアクセストークンを取得すると、追加の検証(API呼び出し)を実行する必要があります。 – shurik

答えて

0

これは私がなってしまったものです:AddOAuthた後、起動時に

.AddScheme<OAuthOptions, BearerAuthHandler>(BearerAuthHandler.DefaultSchemeName, ...);

これはあなたのコントローラに行く:

[Authorize(AuthenticationSchemes = BearerAuthHandler.DefaultSchemeName)]

このスキームクラスです:https://dotnetfiddle.net/hujDtz

0

OAuthCreatingTicketContext.Failは、最終的に認証呼び出しによって返されるHandleRequestResultに影響を与えないようです。私がやらなければならなかったのは、OnCreatingTicketハンドラから例外をスローし、OAuthHandler.HandleRemoteAuthenticateAsyncをオーバーライドしてHandlerRequestResult.Failを例外から呼び出すことでした。

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) 
    .AddCookie().AddOAuth("schemename", SetOAuthOptions); 

private void SetOAuthOptions(OAuthOptions options) 
{ 
    options.ClientId = ...; 
    options.ClientSecret = ...; 
    options.CallbackPath = ...; 
    options.AuthorizationEndpoint = ...; 
    options.TokenEndpoint = ...; 
    options.Events = new OAuthEvents 
    { 
     OnCreatingTicket = async context => await AddIdentityClaimsAsync(context), 
     OnTicketReceived = ... 
    }; 
} 

private async Task AddIdentityClaimsAsync(OAuthCreatingTicketContext context) 
{ 
    ... 
    if(noAccess) 
     throw new MyCustomException("Sorry, you don't have access to the product."); 
} 

// In OAuthHandler<T> 
protected override async Task<HandleRequestResult> HandleRemoteAuthenticateAsync() 
{  
    try 
    { 
     return await base.HandleRemoteAuthenticateAsync(); 
    } 
    catch (MyCustomException e) 
    { 
     return HandleRequestResult.Fail(e); 
    } 
} 

これは誰かを助けることを望みます。

関連する問題