如何使用Azure ACS开发用户身份验证的REST服务

时间:2011-10-03 20:55:05

标签: oauth azure oauth-2.0 acs

我正在开发一个使用MS Azure Access Control Service进行身份验证的REST服务。如果示例是任何指示,则以这种方式保护REST服务的典型方法是为受保护服务提供全局用户名和pw,私钥或X.509证书。但是,我想在移动设备上使用被动用户登录机制,其流程更像以下内容:

  1. 未经身份验证的用户尝试从应用
  2. 访问受保护的服务
  3. 移动应用重定向到浏览器应用(或嵌入式浏览器)
  4. 用户从ACS登录页面选择用于登录(facebook,google等)的身份提供商
  5. 用户输入身份提供商的凭据
  6. 浏览器重定向回应用
  7. App以某种方式获取SWT令牌以用于后续REST请求。
  8. 我坚持第5步 - 获取SWT令牌,而我发现的现有示例似乎并没有解决这个问题。此外,我实际上正在尝试使用WPF中的桌面客户端构建概念验证,这可能会使事情变得复杂。任何人都可以建议一个特定的教程或追求的路径使用每用户身份验证与每服务?感谢。

    修改 在我深入研究这个问题时,我意识到下面发布的示例(以及大多数其他示例)都是基于OAuth WRAP,已经弃用了OAuth 2.0。任何人都可以建议更新的参考?谷歌搜索已经出现http://blogs.msdn.com/b/adventurousidentity/archive/2011/09/18/acs-v2-oauth-2-0-delegation-support-explained.aspxhttp://connect.microsoft.com/site1168/Downloads/DownloadDetails.aspx?DownloadID=32719,但它们并不是最直观的。

2 个答案:

答案 0 :(得分:3)

您应该查看ACS Windows Phone示例:

http://msdn.microsoft.com/en-us/library/gg983271.aspx

这里不使用Silverlight,而是使用WPF。大多数代码都应该可以重用。请注意,由于您使用的是WPF,因此您需要注册自己的对象以进行脚本编写,例如:

[ComVisibleAttribute(true)]
public class NotifyHandler
{
    public void Notify(string notifyString)
    {
        // Here I have the token.
    }
}

this.webBrowser1.ObjectForScripting = new NotifyHandler();

<强>更新

上面的示例使用OAuth Wrap联系安全服务。如果您想使用OAuth2,您应该更改“授权”标头集的方式:

OAuth WRAP案例:

 WebClient client = new WebClient();
 client.Headers["Authorization"] = "OAuth " + _rstrStore.SecurityToken;

OAuth2案例:

 WebClient client = new WebClient();
 client.Headers["Authorization"] = string.Format("OAuth2 access_token=\"{0}\"", token);

您可以使用“简单服务”示例作为指南,在REST服务中实现令牌验证:

http://msdn.microsoft.com/en-us/library/gg185911.aspx

然而,如果您想要实现更完整的示例,您可以查看CTP版本1.4中CustomerInformationService的保护方式:

https://connect.microsoft.com/site1168/Downloads/DownloadDetails.aspx?DownloadID=35417

答案 1 :(得分:0)

看一下这个:

WPF应用程序,包含Live ID,Facebook,Google,Yahoo!,Open ID http://social.technet.microsoft.com/wiki/contents/articles/4656.aspx