0

OWIN ミドルウェアを使用して Web Api トークン ベースの認証を使用しています。トークンは正常に生成されましたが、デコードできません。たとえば、そこからユーザー名とパスワードを抽出できません。これが私の構成であり、私の起動コードです

var oAuthAuthorizationServerOptions = new OAuthAuthorizationServerOptions
        {
            AllowInsecureHttp = true,
            TokenEndpointPath = new PathString("/api/token"),
            AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
            Provider = new SimpleAuthorizationServerProvider()
        };
        // Token Generation
        app.UseOAuthAuthorizationServer(oAuthAuthorizationServerOptions);
        app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());

トークンを送信するために使用される私のコードは

static async Task RunAsync(JObject token)
    {
        using (var client = new HttpClient())
        {
            client.Timeout = new TimeSpan(1000000000000);
            client.BaseAddress = new Uri("http://localhost/SampleApp/");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(token["token_type"].ToString(),
                token["access_token"].ToString());
  }}

私の認証コード

var authenticationSchema = httpContext.Request.Headers["Authorization"];
            if (!String.IsNullOrWhiteSpace(authenticationSchema))
                authentication = AuthenticationHeaderValue.Parse(authenticationSchema);

if (authentication != null)
{
 var unencoded = Convert.FromBase64String(authentication.Parameter);
        var userpw = Encoding.GetEncoding("iso-8859-  1").GetString(unencoded);
        var creds = userpw.Split(':');
        return new Tuple<string, string>(creds[0], creds[1]);
}

and the code failed when trying to decode the code from base64 string note:- my sample token is 3K8vHKHA2ZsKfKbvzUbo4a2sat2JLzvvyxCZ0KSD6s1wUS3t3oDPXuQ89aTmGpsG4ZL8O0cr8M9EUeZGtdM6FBwR7gLFcLZkTaimFGKyyZMNce9trQavVTzs6gam6qach1rPTLv_gIYGgPmM-401PZsr89BIXw4acTpJL3KbXs8y7PQ-o-eTV2IA8euCVkqC02iEnAzmS0SwhBouISCC-HvcNpE2aNixg4JXEt8EslU you can see the attached for the exceptionここに画像の説明を入力

4

1 に答える 1

0

コードからわかる限り、アクセストークンはプレーンでサーバーに送信されます。ただし、クライアント側で次のようにアクセス トークンをエンコードする必要があります。

client.DefaultRequestHeaders.Authorization = 
    new AuthenticationHeaderValue(token["token_type"].ToString(),
        Convert.ToBase64String(Encoding.GetEncoding("iso-8859-1").GetBytes(token["access_token"].ToString())));

次に、サーバー側で base64 文字列からアクセス トークンを変換できます。例外メッセージに示されているように、指定したアクセス トークン文字列値は有効な Base64 文字列ではありません。

于 2015-08-17T10:23:25.893 に答える