发布后,OAuthValidateClientAuthenticationContext.ClientId和Parameters为null

时间:2017-12-21 22:19:09

标签: asp.net-web-api oauth owin

服务器端代码

public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
    {
        try
        {
            string clientId;
            string clientSecret, deviceId;
            string appId = context.Parameters["applicationId"];//renamed from applicationName
            string version = context.Parameters["version"];
            deviceId = context.Parameters["deviceId"];//renamed from applicationName

            context.OwinContext.Set("appId", appId);
            ApiAppClient client;

            if (!context.TryGetBasicCredentials(out clientId, out clientSecret))
            {
                context.TryGetFormCredentials(out clientId, out clientSecret);
            }
            if (string.IsNullOrWhiteSpace(clientId))
            {
                context.TryGetFormCredentials(out clientId, out clientSecret);
            }

            if (string.IsNullOrWhiteSpace(clientId))
            {
                var query = context.Parameters.Where(x => x.Key == "client_id");
                if (query.Any())
                {
                    clientId = query.FirstOrDefault().Value?[0];
                }

            }
            if (string.IsNullOrWhiteSpace(clientId))
            {
                //Remove the comments from the below line context.SetError, and invalidate context 
                //if you want to force sending clientId/secrects once obtain access tokens. 
                //context.Validated();
                context.SetError($"Missing ClientId.");
                ////context.Rejected();
                return;
            }

客户端代码

POST https://example.com/token HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Host: example.com
Content-Length: 258

client_id=xxxxxxxxxxxxxxxxxxxxxx&client_secret=zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz&applicationId=aaaaaaaaaaaaaaaaaaaaaaaa&username=me&password=somthing&grant_type=password&deviceId=5545555&version=3.2.1.89

我对上面的OAuth进程有一个奇怪的例子,ClientId为null,而且参数为空。

  1. 上述代码适用于所有开发人员计算机。
  2. 如果在Developer Machine上的IIS中托管,则编译版的Web API也可以正常工作。
  3. 但是当我尝试在远程服务器上托管Web API时,它总是会出错" Missing ClientId"。
  4. 它用于在升级NuGet包之前在同一服务器上完美地工作。 Microsoft.Owin.Security.OAuth 3.0.1.0升级到3.1.0.0 Microsoft.Owin.Security 3.0.1.0升级到3.1.0.0 和所有Unity包

0 个答案:

没有答案