DotNetOpenAuth ctp 4.0 ResourceServer.VerifyAccess() метод выбрасывает нулевое исключение
У меня возникают трудности при попытке установить DotNetOpenAuth ctp 4.0. Вот ситуация: у меня есть сервер ресурсов, такой же, как в примере OAuth2, однако я использую предварительный просмотр 6 веб-интерфейса WCF, поэтому я написал точку расширения, отвечающую за проверку того, что клиент, выполняющий запрос операции, уже авторизованный для этого, для этого вызывается метод ResourceServer.VerifyAccess. Этот метод выбрасывает нулевое исключение, и я не выяснил, почему.
Вот как я написал свой обработчик операций:
protected override HttpRequestMessage OnHandle(HttpRequestMessage input)
{
var principal = VerifyOAuth2(input);
if(principal == null)
{
throw new HttpResponseException(new HttpResponseMessage
{
StatusCode = HttpStatusCode.Unauthorized,
Content = new StringContent("Invalid Access Token")
});
}
var roles = _authorizationAttribute.Roles.Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries);
if(!roles.Any(role => principal.IsInRole(role)))
{
throw new HttpResponseException(new HttpResponseMessage
{
StatusCode = HttpStatusCode.Forbidden,
Content = new StringContent("User has not permission to access this resource")
});
}
return input;
}
private static IPrincipal VerifyOAuth2(HttpRequestMessage request)
{
var headers = request.Headers;
var headersCollection = new WebHeaderCollection();
foreach (var header in headers)
{
headersCollection.Add(header.Key, header.Value.ToString());
}
using (var signing = MvcApplication.CreateAuthorizationServerSigningServiceProvider())
{
using (var encrypting = MvcApplication.CreateResourceServerEncryptionServiceProvider())
{
var resourceServer = new ResourceServer(new StandardAccessTokenAnalyzer(signing, encrypting));
IPrincipal result;
var httpRequestInfo = new HttpRequestInfo(request.Method.ToString(), request.RequestUri,
request.RequestUri.AbsoluteUri, headersCollection, request.Content.ReadAsStreamAsync().Result);//Since I dont have an HttpResourceInfo Object I need to build one from my request, using an overloaded method.
var error = resourceServer.VerifyAccess(httpRequestInfo, out result); //here is where the exception is thrown.
// TODO: return the prepared error code.
return error != null ? null : result;
}
}
Я не знаю, помогает ли этот код, но если это не так, можете ли вы сказать мне, когда этот метод генерирует исключение нулевой ссылки? Может быть, это поможет мне немного! заранее спасибо.
1 ответ
Stacktrace для NullReferenceException
было бы полезно.
Вместо этого вы пытались получить HttpRequestMessageProperty
от WCF и передавая это HttpRequestInfo
конструктор путь OAuthAuthorizationManager
делает в образце?