ASP.NET / C#自动执行OAuth2身份验证

时间:2013-07-24 14:04:42

标签: c# asp.net oauth-2.0

我正在测量生命体征设备。制造商是iHealth。这些连接智能手机,其中安装了一个应用程序,当您使用您的帐户登录时,它会将测量结果发送到他们的服务器。我必须连接到这个服务器并从许多帐户中提取数据,但此刻我将满足只提取我的。为此,iHealth提供了一个沙箱示例,您可以通过以下网址下载:http://sandbox.ihealthlabs.com/contentfiles/files/SandboxAPISample.zip

在此示例中,所有需要的变量(client_id,client_secret,redirect_url等)都在ConnectToiHealthlabs.cs类中设置。

启动项目时,会加载页面GetStarted.aspx,只显示一个按钮。通过单击按钮,可以从ConnectToiHealthlabs.cs类调用follow方法:

public void GetCode()
    {
        string url = url_authorization
            + "?client_id=" + client_id
            + "&response_type=" + response_type_code
            + "&redirect_uri=" + redirect_uri
            + "&APIName=" + APIName_BP + " " + APIName_Weight;

        HttpContext.Current.Response.Redirect(url);
    }

重定向的网址是

http://sandboxapi.ihealthlabs.com/api/OAuthv2/userauthorization.ashx?client_id=e4dce2f7027044e0a6ce82ef44d27e23&response_type=code&redirect_uri=http://localhost:9201/TestPage.aspx&APIName=OpenApiBP OpenApiWeight

所以你将到达页面

http://sandboxapi.ihealthlabs.com/api/OAuthv2/oauthlogin.aspx?redirect_uri=%2fapi%2fOAuthv2%2fuserauthorization.ashx%3fclient_id%3de4dce2f7027044e0a6ce82ef44d27e23%26response_type%3dcode%26redirect_uri%3dhttp%3a%2f%2flocalhost%3a9201%2fTestPage.aspx%26APIName%3dOpenApiBP%2520OpenApiWeight

现在您可以使用沙箱凭据进行身份验证:

用户名:sandboxuser@ihealthlabs.com

密码:111111

如果凭据是正确的,您将被重定向到调用此方法的TestPage.aspx:

public bool GetAccessToken(string code, string client_para, HttpContext httpContext)
    {
        string url = url_authorization
        + "?client_id=" + client_id
        + "&client_secret=" + client_secret
        + "&client_para=" + client_para
        + "&code=" + code
        + "&grant_type=" + grant_type_authorization_code
        + "&redirect_uri=" + redirect_uri;

        string ResultString = this.HttpGet(url);

        if (ResultString.StartsWith("{\"Error\":"))
        {
            this.Error = JsonDeserializ<ApiErrorEntity>(ResultString);
            return false; 
        }
        else
        {
            AccessTokenEntity accessToken = this.JsonDeserializ<AccessTokenEntity>(ResultString);
            httpContext.Session["token"] = accessToken;
            return true;
        }
    }

结果网址是

http://sandboxapi.ihealthlabs.com/api/OAuthv2/userauthorization.ashx?client_id=e4dce2f7027044e0a6ce82ef44d27e23&client_secret=bb6a0326db55468f8f474ad5fd79aa0a&client_para=123&code=a1yBBCZu80DXlhnSmyYEKIY6cQ73cVj7O9i1hv7rH68EQIgIlY0*pODnNbD2gyEMu6UnHvksB5Ndf42-I8i4xPHb4jTqzpue0S9PVLTCjw2bUMOZCyiBoCBjcllUzHzo&grant_type=authorization_code&redirect_uri=http://localhost:9201/TestPage.aspx

因此,如果一切正确,您可以看到一个下载BP数据的按钮(网址: http://sandboxapi.ihealthlabs.com/api/OpenApi/downloadbpdata.ashx?access_token=a1yBBCZu80DXlhnSmyYEKIY6cQ73cVj7O9i1hv7rH6-zMHK6iEu9OCg4MCErg-lOvm0WKcGwfZfVWanKB3-s2BLUZniYfwn99tsdWTRhlvBU8ZFTcIk-9qPeMtN*zVTNosPp4RsCiHF2D-o-DvpdwjS9qQhcwMEKgunaLSK1Qu8&client_id=e4dce2f7027044e0a6ce82ef44d27e23&client_secret=bb6a0326db55468f8f474ad5fd79aa0a&redirect_uri=http://localhost:9201/TestPage.aspx&sc=082a65ac25db4262b795f635c974de47&sv=bd82a25dcf18446b90f3219ef7d0b441),

下载重量数据(网址: http://sandboxapi.ihealthlabs.com/api/OpenApi/downloadweightdata.ashx?access_token=a1yBBCZu80DXlhnSmyYEKIY6cQ73cVj7O9i1hv7rH6-zMHK6iEu9OCg4MCErg-lOvm0WKcGwfZfVWanKB3-s2BKc5tIrfqZpz5gC*IAhOnIr1J1PhT0M0*IPDtIZ6SLuTZtNC5Hn0C4u0yDBo9zunmoDwkoz2wKmAqE4aXUJFE4&client_id=e4dce2f7027044e0a6ce82ef44d27e23&client_secret=bb6a0326db55468f8f474ad5fd79aa0a&redirect_uri=http://localhost:9201/TestPage.aspx&sc=082a65ac25db4262b795f635c974de47&sv=add22354420244ba9e0f3a5a6b402096

并刷新令牌(网址: http://sandboxapi.ihealthlabs.com/api/OAuthv2/userauthorization.ashx?client_id=e4dce2f7027044e0a6ce82ef44d27e23&client_secret=bb6a0326db55468f8f474ad5fd79aa0a&client_para=&refresh_token=a1yBBCZu80DXlhnSmyYEKIY6cQ73cVj7O9i1hv7rH6-zMHK6iEu9OCg4MCErg-lOvm0WKcGwfZfVWanKB3-s2Pl0dL9j3ijv6zPwlqNtRkO2lRuNbVszrIeKHqx2ZToJCLvFHNHmMJWni*QMiIgWRl-B3VIHGdpGFPpD5iD0p9Y&response_type=refresh_token&redirect_uri=http://localhost:9201/TestPage.aspx)。

在此示例中,它将转发器与返回DownloadBPData和DownloadWeightData方法的列表数据绑定,以显示页面中的值。

我的目标是在没有打开弹出窗口的情况下到达这两个列表,并且无需手动身份验证来安排更新速度。

全部在日志中,如页面:

24/07/2013 12:00 - 找到用户ABC的新数据

24/07/2013 11:30 - 为用户XYZ找到新数据

24/07/2013 11:00 - 等......

但我真的不知道从哪里开始。

我所拥有的唯一文档是以下文件:http://developer.ihealthlabs.com/contentfiles/files/Open%20API%20Protocol.zip

沙盒项目中的url与我必须连接的服务器不同 我发现了很多OAuth2库,但所有的例子都是针对Facebook,Twitter等的。

谢谢。

0 个答案:

没有答案