Asp.net WebApi個人アカウントの認証と承認を理解しようとしています。 これ を含むいくつかのチュートリアルをWeb上で見ました。つまり、ユーザーエージェントがユーザー名とパスワードを提供すると、APIはトークンを発行します。このトークンは、クライアントがAPIへの後続の呼び出しで使用して自身を識別します。ユーザーエージェントは、通常は次のようにリクエストを行うことでトークンを受け取ります: http://example.com/Token 。パスは、次のようにStartupクラスで設定されているように見えます。
TokenEndpointPath = new PathString("/Token")
私の問題は、そのパスに一致するコントローラーメソッドが見つからないことです。これはどのように作動しますか?
ASP.NETで個別認証を使用して新しいプロジェクトを作成すると、認証要求を処理するOAuthプロバイダーを使用してソリューションが作成されます。
ソリューションを見ると、ApplicationOAuthProviderクラスのProvidersフォルダーが表示されているはずです。
このクラスは、Webサイトのメンバーを認証するためのすべてのロジックを実装します。構成はスタートアップ時に設定され、OAuthOptionを介してURLエンドポイントをカスタマイズできるようにします。
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(PublicClientId),
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
AllowInsecureHttp = true
};
TokenEndPointパスプロパティは、GrandResourceOwnerCredentialsのGrantResourceOwnerCredentialsメソッドを起動するURLを定義しました。
フィドラーを使用してこの種のボディを認証および使用する場合
grant_type=password&username=testUserName&password=TestPassword
次のメソッドを渡す必要があります。
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();
ApplicationUser user = await userManager.FindAsync(context.UserName, context.Password);
if (user == null)
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
return;
}
ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager,
OAuthDefaults.AuthenticationType);
ClaimsIdentity cookiesIdentity = await user.GenerateUserIdentityAsync(userManager,
CookieAuthenticationDefaults.AuthenticationType);
AuthenticationProperties properties = CreateProperties(user.UserName);
AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);
context.Validated(ticket);
context.Request.Context.Authentication.SignIn(cookiesIdentity);
}
ここで、context.UserNameとcontext.Passwordは、リクエストで使用されるデータで設定されます。 IDが確認された後(ここではEntity Frameworkと、データベース内のいくつかのuserName、Passwordを使用)、Bearerトークンが呼び出し元に送信されます。このベアラートークンは、他の呼び出しの認証に使用できます。
よろしく。