2

假设我有一个 Web 客户端(即 MVC 4 客户端),它使用 oAuth 提供程序(即 Facebook、Google 等)对用户进行身份验证。我想在我的客户端逻辑中调用另一个 Web 服务,并且该 Web 服务还通过 oAuth 提供者进行身份验证。

来自客户端的 Web 服务请求是什么样的?我需要将什么传递给 Web 服务?

4

1 回答 1

2

我建议您查看这个问题,如何通过 DotNetOpenAuth 使用 OAuth2 访问令牌授权对 ServiceStack 资源的访问?. 海报提供了他的最终解决方案,包括一个示例解决方案的链接,他慷慨地开源了该解决方案。对于他的解决方案,客户端代码如下所示:

// Create the ServiceStack API client and the request DTO
var apiClient = new JsonServiceClient("http://api.mysite.com/");
var apiRequestDto = new Shortlists { Name = "dylan" };

// Wire up the ServiceStack client filter so that DotNetOpenAuth can 
// add the authorization header before the request is sent
// to the API server
apiClient.LocalHttpWebRequestFilter = request => {
    // This is the magic line that makes all the client-side magic work :)
    ClientBase.AuthorizeRequest(request, accessTokenTextBox.Text);
}

// Send the API request and dump the response to our output TextBox
var helloResponseDto = apiClient.Get(apiRequestDto);

Console.WriteLine(helloResponseDto.Result);

此处提供了类似的解决方案:https ://stackoverflow.com/a/13791078/149060 ,它演示了根据 OAuth 1.0a 进行的请求签名

var client = new JsonServiceClient (baseUri);

client.LocalHttpWebRequestFilter += (request) => {
    // compute signature using request and a previously obtained
    //  access token 
    string authorization_header = CalculateSignature (request, access_token);

    request.Headers.Add ("Authorization", authorization_header);
};
var response = client.Get<MySecuredResponse> ("/my/service");

当然,您需要进行调整以适应您的 OAuth 提供者的要求,即签名、令牌等。

于 2013-09-23T15:33:40.653 回答