User Tools

Site Tools


ceph:authentication_with_dotnet

Authentication with .Net/c#

Documentation
Name: Authentication with .Net/c#
Description: How to setup amazon.s3 nuget for c# to authenticate with ceph
Modification date :07/11/2018
Owner:dodger@ciberterminal.net
Notify changes to:Owner
Tags: oracle, deadlocks

Instructions

RadosGW seems to not be happy when using AWS4 authentication method.
Ignore ceph's official documentation, it doesn't work.
Making radosgw log in debug level 10 (or more):

radosgw -n client.rgw.bvmld-osgw-101 --debug-rgw=20 -f --debug_ms 20

You'll see a wonderful:

...
2018-11-07 12:19:47.943779 7f36ddffb700 20 RGWEnv::set(): HTTP_AUTHORIZATION: AWS4-HMAC-SHA256 Credential=****/20181107/us-east-1/s3/aws4_request, SignedHeaders=host;user-agent;x-amz-content-sha256;x-amz-date, Signature=*********
...
2018-11-07 12:19:29.429245 7f36ddffb700  1 ====== starting new request req=0x7f36bc011dc0 =====
2018-11-07 12:19:29.429259 7f36ddffb700  2 req 2:0.000014::GET /::initializing for trans_id = tx000000000000000000002-005be2ca41-1030-default
2018-11-07 12:19:29.429263 7f36ddffb700 10 host=bvmld-osgw-101.ciberterminal.net
2018-11-07 12:19:29.429265 7f36ddffb700 20 subdomain= domain=bvmld-osgw-101.ciberterminal.net in_hosted_domain=1
2018-11-07 12:19:29.429273 7f36ddffb700 10 meta>> HTTP_X_AMZ_CONTENT_SHA256
2018-11-07 12:19:29.429276 7f36ddffb700 10 meta>> HTTP_X_AMZ_DATE
2018-11-07 12:19:29.429281 7f36ddffb700 10 x>> x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
2018-11-07 12:19:29.429282 7f36ddffb700 10 x>> x-amz-date:20181107T111929Z
2018-11-07 12:19:29.429293 7f36ddffb700 10 s->object=<NULL> s->bucket=<NULL>
2018-11-07 12:19:29.429297 7f36ddffb700  2 req 2:0.000052:s3:GET /::getting op
2018-11-07 12:19:29.429298 7f36ddffb700  2 req 2:0.000054:s3:GET /:list_buckets:authorizing
2018-11-07 12:19:29.429301 7f36ddffb700 10 failed to authorize request
2018-11-07 12:19:29.429374 7f36ddffb700  2 req 2:0.000129:s3:GET /:list_buckets:http status=400
2018-11-07 12:19:29.429376 7f36ddffb700  1 ====== req done req=0x7f36bc011dc0 http_status=400 ======

As you can see: failed to authorize request

The key option is to use an “old” version of the auth api:

config.SignatureVersion = "2";

Official UN-documentation (there's near-to-zero information).

Sample code

sample_ceph.cpp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
 
namespace ProvaS3
{
    class Program
    {
        static void Main(string[] args)
        {
 
            string accessKey = "****";
            string secretKey = "****";
 
            AmazonS3Config config = new AmazonS3Config();
            config.ServiceURL = "http://bvmld-osgw-101.ciberterminal.net";
            config.UseHttp = true;
            config.SignatureVersion = "2";
 
            //config.ForcePathStyle = true;
 
            AmazonS3Client s3Client = new AmazonS3Client(
                    accessKey,
                    secretKey,
                    config
                    );
 
            ListObjectsRequest request = new ListObjectsRequest();
            request.BucketName = "epayments-reporting";
            ListObjectsResponse response = s3Client.ListObjects(request);
            foreach (S3Object o in response.S3Objects)
            {
                Console.WriteLine("{0}\t{1}\t{2}", o.Key, o.Size, o.LastModified);
            }
        }
    }
}
ceph/authentication_with_dotnet.txt · Last modified: 2019/07/18 09:17 (external edit)