2016-02-15 57 views
1

我想從ServerEventsClient訪問我的自定義AuthProvider(它從繼承自BasicAuthProvider)。 提供商的代碼是非常簡單的ATM消費自定義服務堆AuthProvider

public class RoomsAuthProvider : BasicAuthProvider 
{ 
    public RoomsAuthProvider(AppSettings appSettings) : base(appSettings) 
    { 
    } 

    public RoomsAuthProvider() 
    { 
    } 

    public override bool TryAuthenticate(IServiceBase authService, 
     string userName, string password) 
    { 
     return true; 
    } 

    public override IHttpResult OnAuthenticated(IServiceBase authService, 
     IAuthSession session, IAuthTokens tokens, 
     Dictionary<string, string> authInfo) 
    { 
     session.FirstName = "some_firstname_from_db"; 
     return base.OnAuthenticated(authService, session, tokens, authInfo); 
    } 
} 

我註冊它像往常一樣:

public override void Configure(Funq.Container container) 
{ 
    container.Register<ICacheClient>(new MemoryCacheClient()); 

    Plugins.Add(new AuthFeature(() => new AuthUserSession(), 
     new IAuthProvider[] 
     { 
      new RoomsAuthProvider() 
     })); 

    Plugins.Add(new ServerEventsFeature()); 
} 

和我的客戶是:

var client = new ServerEventsClient("http://localhost:1337/", "home") 

嘗試驗證:

var authResponse = client.Authenticate(new Authenticate 
{ 
    provider = "RoomsAuthProvider", 
    UserName = "[email protected]", 
    Password = "[email protected]", 
    RememberMe = true, 
}); 

I總是得到NotFound錯誤,並且rror聲明沒有爲此AuthProvider設置配置。在提供程序中設置Name和Realm沒有幫助。有這種類型的客戶端的另一個身份驗證流程或我錯過了什麼嗎?歡迎任何想法

回答

2

當您繼承BasicAuthProvider時,您還繼承它的provider name,除非您覆蓋它,否則是default is "basic"(即,它不是繼承類的名稱)。

BasicAuthProvider implements HTTP Basic Auth所以你打算通過HTTP基本認證而不是通過Web服務調用來調用它。

如果您嘗試通過Web服務調用進行身份驗證,則應繼承CredentialsAuthProvider,而不是像您在示例中那樣通過用戶名/密碼進行身份驗證的身份驗證方法。爲CredentialsAuthProvider提供者的名稱是credentials那麼你的客戶通話將被:

var authResponse = client.Authenticate(new Authenticate 
{ 
    provider = "credentials", 
    UserName = "[email protected]", 
    Password = "[email protected]", 
    RememberMe = true, 
}); 
+0

我已經改變了基類CredentialsAuthProvider,重寫名市民新的靜態字符串名稱=「RoomsAuth」;但它沒有工作 – HardLuck

+0

UPD:將提供者名稱更改爲可以工作的憑證 – HardLuck

+0

@HardLuck這是因爲靜態Name屬性本身沒有做任何事情,您需要改變實例'Provider'屬性 - 但是我' d保持原樣,因爲它仍然代表「憑據」身份驗證提供程序。 – mythz