Oauth를 Autofac과 통합해야합니다. 하지만 뭔가 잘못되었습니다. 나는 왜 그런지 이해하지만, 어떻게 해결해야할지 모르겠다. 제 코드를 보도록하겠습니다. 내 Autofac 구성Autofac 4.0을 통해 OAuthAuthorizationServerProvider 구성
{
builder.RegisterType<CustomAuthorizationServerProvider>()
.PropertiesAutowired()
.SingleInstance();
builder.RegisterType<MyBusinessObj>()
.As<IMyBusinessObj>()
.InstancePerRequest()
.PropertiesAutowired();
//IMySessionObj is a prop inside MyBusinessObj
builder.RegisterType<MySessionObj>()
.As<IMySessionObj>()
.InstancePerRequest()
.PropertiesAutowired();
//IMyUnitOfWorkObjis a prop inside MyBusinessObj
builder.RegisterType<MyUnitOfWorkObj>()
.As<IMyUnitOfWorkObj>()
.InstancePerRequest();
...
}
Startup.cs
나는 당신이 볼 수 있듯이, 나는 용기에 해결 고전적인 구성 플러스 내 authorizationServerProvider
..의 해상도를 가지고있다. .. 왜냐하면 그것은 싱글 톤이기 때문입니다. 내 CustomAuthorizationServerProvider
을 구현하는 방법이있다
app.UseAutofacMiddleware(_container);
app.UseAutofacWebApi(config);
var oauthServerOptions = new OAuthAuthorizationServerOptions
{
...,
Provider = _container.Resolve<CustomAuthorizationServerProvider>()
};
app.UseOAuthAuthorizationServer(oauthServerOptions);
app.UseWebApi(config);
CustomAuthorizationServerProvider.cs
. 여기
public class CustomAuthorizationServerProvider: OAuthAuthorizationServerProvider
{
public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
var autofacLifetimeScope = OwinContextExtensions.GetAutofacLifetimeScope(context.OwinContext);
var myBusinessObj = autofacLifetimeScope.Resolve<IMyBusinessObj>();
var xxx = myBusinessObj.DoWork();
...
return Task.FromResult<object>(null);
}
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var myBusinessObj = autofacLifetimeScope.Resolve<IMyBusinessObj>();
var xxx = myBusinessObj.DoWork();
...
context.Validated(ticket);
}
}
내가 해결 내 IMyBusinessObj
lifetimescope에서가 아닌 컨테이너에 있습니다. 이 객체는 db에 연결하고, 세션에 액세스하고, 캐시에 액세스하는 등의 책임을 (간접적으로)합니다. 그래서 싱글 톤이 될 수 없습니다.
요청 당 유효 기간이 필요합니다. 그래서 여기에 문제가 .. 두 가지 문제가 내 구성에 있습니다.
- 은 내가
SingleInstance
객체 내부InstancePerRequest
개체가 있습니다. 그렇게 할수 없어. Troubleshooting Per-Request Dependencies 시작시 oauth를 구성 할 때 실제로 컨텍스트에 요청이 존재하지 않기 때문에
InstancePerRequest
개체를 가질 수 없습니다.
그래서 .. 내 문제가 무엇인지 이해했습니다.
아이디어 또는 도움말? 고맙습니다.