public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider
{
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
bool isvalidUser = AuthenticateUser(context.UserName, context.Password);// validate my user&password
if (!isvalidUser)
{
context.Rejected();
return;
}
// create identity
var id = new ClaimsIdentity(context.Options.AuthenticationType);
id.AddClaim(new Claim("sub", context.UserName));
id.AddClaim(new Claim("role", "user"));
// create metadata to pass on to refresh token provider
var props = new AuthenticationProperties(new Dictionary<string, string>
{
{ "as:client_id", context.ClientId }
});
var ticket = new AuthenticationTicket(id, props);
context.Validated(ticket);
}
}
ログイン時間このSimpleAuthorizationServerProvider(Web Api内)を使用しています。アクセストークンを取得してクライアントに送信できます。再度、ログインユーザーは他のページにアクセスする必要があります。サーバー側(Web Api)でカスタムOauth2アクセストークンを検証するにはどうすればよいですか?
クライアント側から私はこのような生成トークンです
private static TokenResponse GetToken()
{
var client = new OAuth2Client(new Uri("http://localhost:1142/token"), "client1", "secret");
var response = client.RequestResourceOwnerPasswordAsync(uid, pwd).Result;
Console.WriteLine(response.AccessToken);
return response;
}
そして、このような認証の後に特定のWebAPIを呼び出します
private static void CallProfile(string token)
{
var client = new HttpClient();
client.SetBearerToken(token);
var response = client.GetStringAsync(new Uri("http://localhost:1142/api/Profile?id=1")).Result;
}
実際、OWINはほとんどすべてを処理します。 ASP.NET APIv2サーバーを使用して要求を受信する場合。トークンをhttpリクエストで正しい形式で渡す必要があります。
1。 httpリクエストを送信する
トークンを渡す方法は2つあります。
2。リクエストを認証します
(ClaimsPrincipal)Thread.CurrentPrincipal.Identity.IsAuthenticated
を使用して、requested token
が有効かどうかを確認できます
3。リクエストを承認します
[Authorize]
属性を使用することも、独自のAuthorizeAttribute
を作成することもできます。
独自の属性を実装すると、さらに興味深いことができます。データベースに接続して複雑な認証を行うことです。
これは、ASP.NET Web APIのOAUTH2から始めるのに適したドキュメントだと思います: http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api -2-owin-asp-net-identity /