2013-02-13 78 views
1

我有一个Azure卷轴需要ACSv2身份验证,我想从winforms应用程序访问。我的许多客户使用Windows XP,因此我无法使用WIF(Windows XP上不可用)。在这种情况下,为我的Web请求获取身份验证令牌的最佳方式是什么?从Winforms访问ACS Azure

回答

1

对于桌面应用程序,你可以做到以下几点:

  1. 从ACS命名空间中获取身份提供者列表
  2. 显示这些在WebBrowser控件
  3. 在用户登录后,得到令牌从WebBrowser控件中解析出来。

这是类似当您要在Windows Phone应用程序中使用ACS时。我建议你看看这篇博文:Azure ACS on Windows Phone 7。以下是在用户通过WebBrowser控件(在WP7上)登录后解析令牌的示例代码:

private void SignInWebBrowserControl_ScriptNotify(object sender, NotifyEventArgs e) 
{ 
    var acsResponse = ACSResponse.FromJSON(e.Value); 

    RequestSecurityTokenResponse rstr = null; 
    Exception exception = null; 
    try 
    { 
     string binaryToken = HttpUtility.HtmlDecode(acsResponse.securityToken); 
     string tokenText = RequestSecurityTokenResponseDeserializer.ProcessBinaryToken(binaryToken); 
     DateTime expiration = DateTime.Now + TimeSpan.FromSeconds(acsResponse.expires – acsResponse.created); 

     rstr = new RequestSecurityTokenResponse 
        { 
         Expiration = expiration, 
         TokenString = tokenText, 
         TokenType = acsResponse.tokenType 
        }; 
+0

我想将其标记为已回答。 “OnAuthenticateRequest”事件处理程序中的“ValidateRequest”方法正常工作,但对身份验证管理器向创建的“ClaimsPrincipal”发出的“Authenticate”请求失败。校长不是身份验证,整个节目都停在那里。我想这是一个配置问题,但我无法确定失败的根源。 – 2013-02-19 09:32:53

+0

好的。我已经得到这个工作。我的问题(我真的不明白这一点)是,我正在发送Web请求'http:// localhost/contacts/Directory',就像在示例中一样,后验证回调被触发,一次为该URL (http:// localhost/contacts/Directory /',但是没有添加斜杠),并且测试现在可以正常工作 – 2013-02-19 14:27:10

+0

要实现这个作为winforms应用程序,我们必须更改HttpUtility(用于URL编码),令牌存储的位置以及使用Web浏览器的ObjectForScripting属性来实现通知。 – 2013-02-19 14:33:15