2016-06-16 45 views
2

MobileServiceClientのオーバーロードのLoginAsync(string provider, JObject token)を使用してカスタム認証を実装しようとしています。このAzure Mobile Appsカスタム認証

[MobileAppController] 
public class CustomAuthController : ApiController 
{ 
    public async Task<IHttpActionResult> Post([FromBody] JObject assertion) 
    { 
    ... 
    } 
} 

のようなカスタム認証コントローラをI'haveとバックエンドの起動の内側に、私はルートにクライアント側で

config.Routes.MapHttpRoute("CustomAuth", ".auth/login/CustomAuth",new { controller = "CustomAuth" }); 

を設定する呼び出しは次のとおりです。

var credentials = new JObject 
{ 
    ["email"] = username, 
    ["password"] = password 
};    
MobileServiceUser user; 
try 
{ 
    user = await MobileService.LoginAsync("CustomAuth", credentials); 
} 
catch (Exception ex) 
{ 
    Debug.WriteLine(ex.Message); 
    throw; 
} 

私はすべてそれが正しいことだと思いますLoginAsyncメソッドでコントローラを呼び出すことはできません(デバッグではコントローラの最初の命令にブレークポイントを設定します)。 そしてcatchブロックが決して到達しないので、私は例外を参照することもできません。 しかし、Postmanを使用してCustomAuthControllerにリクエストを送ることができます。この場合、デバッグブレークポイントに達しています... 私は理由を理解できません! 私はMobileAsviceTokenAuthenticationを使用するLoginAsyncをデバッグしようとしています。 バックエンド側で私のカスタム認証はauth0 delegation apiで行われます。

+0

お客様のクライアントコードをさらに表示できますか?ログイン方法をデバッグできない場合、私はあなたがその方法を適切に待っていないと感じています。 –

+0

mmm私は、上記のクライアントコールがタスクを返すメソッド内で待たれているので、署名は 'async Task LoginAsync(文字列のユーザー名、文字列のパスワード)'であり、すべてのチェーンは常にタスクを返します... – andrekiba

答えて

1

コントローラーコードから[MobileAppController]属性を削除する必要があります。この属性は、呼び出しにバージョンヘッダーが含まれ、クライアントSDKがログインメソッドに対してこれらを送信しないという要件を追加します。あるいは、クライアント上で委譲ハンドラを使用してこのヘッダを挿入することもできますが、サーバ側の変更にはコードが少なくて済みます。カスタム認証のコンテキストでは、属性は私が考えることができる利点を提供していないので、削除するのが安全でなければなりません。

+0

ありがとうマット、私はこの特定の気づいていないと正しく、このハンドラは属性でマークするべきではありません。 – andrekiba

関連する問題