OWINを使用したトークンベースの認証を使用するオンラインチュートリアルの後、デモのようにハードコードされたユーザー名/パスワードに対してテストアプリケーションを認証することができました。Asp.Net WebApi OWIN認証
しかし、今では自分のWebアプリケーションのモデルを使用したいと思っています。
私の認証は、デモが示すように、このコードで行われます。
namespace UI
{
public class AuthorisationServerProvider : OAuthAuthorizationServerProvider
{
public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
context.Validated(); // Means I have validated the client.
}
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
// Here we validate the user...
var identity = new ClaimsIdentity(context.Options.AuthenticationType);
if (context.UserName == "user" && context.Password == "password")
{
identity.AddClaim(new Claim(ClaimTypes.Role, "admin"));
identity.AddClaim(new Claim("username", "user"));
identity.AddClaim(new Claim(ClaimTypes.Name, "My Full Name"));
context.Validated(identity);
}
else
{
context.SetError("Invalid grant", "Username or password are incorrect");
return;
}
}
}
}
私は...私のWEBAPIコントローラから、上記のコードを呼び出す方法ではないことを確認私はからモデルを受け取るWebAPIのコントローラを持っている、と。現時点では、上のコードは、起動コードで定義されているmyurl/tokenの呼び出しを想定しています。
私のwebapiコールからのURLは/トークンであると推測していますか?
Login()
{
var data = {
username : this.login.emailAddress(),
password : this.login.password(),
RememberMe: this.login.rememberMe(),
grant_type: "password"
}
return $.ajax({
type: "POST",
data: data ? JSON.stringify(data) : null,
dataType: "json",
url: "/token",
contentType: "application/json"
}).done((reply) => {
alert("Done!");
});
}
しかし、私は例外を取得::だから、私のUI上で私の(ノックアウトビューモデル)のコードで、私はこれを試してみました
“error”: “unsupported_grant_type”
「ポストマン」で、私は認証できていますハードコードされたユーザー名/パスワード。
しかし、私が認証するために、私のUIからの私のAPIコールを配線する方法がわからないです。
私はこのように、私のAPIコントローラ(ASP.Net WebAPIの)上の「ログイン」メソッドを作成するために期待していた。
[Route("login"), HttpPost, AllowAnonymous]
public ReplyDto Login(LoginRequest login)
{
ReplyDto reply = _userService.Login(login.Email, login.Password);
return reply;
}
だから、私の_userServiceチェックをユーザがデータベースにある場合...もしそうなら、OAuth認証をここでいくつかのパラメータを渡して呼んでください。しかし、それが可能であるかどうかはわかりません。このAPIメソッドから認証を呼び出すことはできますか?私は/トークンビットを削除する必要があります。