public override AsyncUnaryCall <TResponse> AsyncUnaryCall <TRequest, TResponse>( TRequest request, ClientInterceptorContext <TRequest, TResponse> context, AsyncUnaryCallContinuation <TRequest, TResponse> continuation) { var now = Util.EpochTimeMillis(); var keyLevel = authentication.KeyLevel; var signer = crypto.CreateSigner(keyLevel); var payload = new GrpcAuthPayload { Request = ByteString.CopyFrom(((IMessage)request).ToByteArray()), CreatedAtMs = now }; var signature = signer.Sign(payload); var metadata = context.Options.Headers ?? new Metadata(); metadata.Add("token-realm", "Token"); metadata.Add("token-scheme", "Token-Ed25519-SHA512"); metadata.Add("token-key-id", signer.GetKeyId()); metadata.Add("token-signature", signature); metadata.Add("token-created-at-ms", now.ToString()); metadata.Add("token-member-id", memberId); metadata.Add("token-security-metadata", encodeSecurityMetadata(authentication)); if (authentication.OnBehalfOf != null) { metadata.Add("token-on-behalf-of", authentication.OnBehalfOf); metadata.Add("customer-initiated", authentication.CustomerInitiated.ToString()); } return(continuation(request, new ClientInterceptorContext <TRequest, TResponse>(context.Method, context.Host, context.Options.WithHeaders(metadata)))); }
public override AsyncUnaryCall <TResponse> AsyncUnaryCall <TRequest, TResponse>( TRequest request, ClientInterceptorContext <TRequest, TResponse> context, AsyncUnaryCallContinuation <TRequest, TResponse> continuation) { var now = Util.EpochTimeMillis(); var keyLevel = authentication.KeyLevel; var signer = crypto.CreateSigner(keyLevel); var payload = new GrpcAuthPayload { Request = ByteString.CopyFrom(((IMessage)request).ToByteArray()), CreatedAtMs = now }; var signature = signer.Sign(payload); var metadata = context.Options.Headers ?? new Metadata(); metadata.Add(TOKEN_REALM, "Token"); metadata.Add(TOKEN_SCHEME, "Token-Ed25519-SHA512"); metadata.Add(TOKEN_KEY_ID, signer.GetKeyId()); metadata.Add(TOKEN_SIGNATURE, signature); metadata.Add(TOKEN_CREATED_AT_MS, now.ToString()); metadata.Add(TOKEN_MEMBER_ID, memberId); var customer = authentication.CustomerTrackingMetadata; if (!string.IsNullOrEmpty(customer.IpAddress)) { metadata.Add(CUSTOMER_IP_ADDRESS_KEY, customer.IpAddress); } if (!string.IsNullOrEmpty(customer.GeoLocation)) { metadata.Add(CUSTOMER_GEO_LOCATION_KEY, customer.GeoLocation); } if (!string.IsNullOrEmpty(customer.DeviceId)) { metadata.Add(CUSTOMER_DEVICE_ID_KEY, customer.DeviceId); } if (authentication.OnBehalfOf != null) { metadata.Add(TOKEN_ON_BEHALF_OF, authentication.OnBehalfOf); metadata.Add(CUSTOMER_INITIATED, authentication.CustomerInitiated.ToString()); } return(continuation(request, new ClientInterceptorContext <TRequest, TResponse>(context.Method, context.Host, context.Options.WithHeaders(metadata)))); }