Owin + Oauth2 + Identity2の使用。Web API2のID2ベアラトークンのアクセス許可の変更
私は、変更したデフォルトの基本認証設定でWeb APIを使用しています。
私startup.cs部分クラス
public void ConfigureAuth(IAppBuilder app)
{
// Enable the application to use a cookie to store information for the signed in user
// and to use a cookie to temporarily store information about a user logging in with a third party login provider
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);//TODO: prob wont need this
// Configure the application for OAuth based flow
PublicClientId = "self";
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(PublicClientId),
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),//TODO: prob wont need this
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
// In production mode set AllowInsecureHttp = false
AllowInsecureHttp = true //TODO: set debug mode
};
// Token Generation
app.UseOAuthBearerTokens(OAuthOptions);
}
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
ConfigureAuth(app);
WebApiConfig.Register(config);
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseWebApi(config);
}
私applicationOAuthProvider.cs
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
//get user
var service = new CarrierApi.CarrierManagementClient();
var result = service.LoginAsync(context.UserName, context.Password);
var user = result.Result.Identity;
//TODO: log stuff here? i.e lastlogged etc?
if (user == null)
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
return;
}
ClaimsIdentity oAuthIdentity = user;
ClaimsIdentity cookiesIdentity = user;
AuthenticationProperties properties = CreateProperties(user.GetUserName());
AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);
context.Validated(ticket);
context.Request.Context.Authentication.SignIn(cookiesIdentity);
}
あなたは私を実際に見ることができるように根元の部分の私startup.csクラス既存のDBへのwcf呼び出しを介してIDを取得します。郵便配達員を使用するとき、私は/トークンのURLを取得し、私のベアラートークンを取得し、次のリクエストで私はそれをヘッダーに渡し、私のコントローラーメソッドを呼び出します。
これは、ユーザーがアクセスを許可していない場合、アクセスが許可されていれば、うまくいきます。
私は同じwcfとDBを使用してユーザーのアクセス権を変更すると、郵便受けに同じリクエストを送信すると、iveがユーザーに割り当てられているロールでその権限を削除してもアクセスできます。
パーミッションが「リフレッシュ」されているか、各リクエストで再度チェックされていることを確認するにはどうすればよいですか?
あなたは、1回のリクエストごとにWCFサービスに電話をかけたいですか? – DavidG
私はデータベースに設定されているアクセス許可をチェックする必要があります、wcfはdbへの唯一のアクセスです。基本的に私はちょうどアクセス許可を確認する方法が必要です変更した場合は、セッションや何かを更新する必要がありますので、許可が働くように – lemunk