Skip to content

Commit

Permalink
Move AuthService (#3272)
Browse files Browse the repository at this point in the history
* Move AuthService and Claims

* Move interceptor and authorization wrappers

* Add artifact

* Address review comments
  • Loading branch information
rautenrieth-da authored and mergify[bot] committed Oct 29, 2019
1 parent 8cfbd50 commit e887318
Show file tree
Hide file tree
Showing 34 changed files with 139 additions and 100 deletions.
1 change: 1 addition & 0 deletions ledger/api-server-damlonx/reference-v2/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ da_scala_binary(
"//daml-lf/language",
"//daml-lf/transaction",
"//language-support/scala/bindings",
"//ledger/ledger-api-auth",
"//ledger/ledger-api-client",
"//ledger/ledger-api-common",
"//ledger/ledger-api-domain",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ import com.daml.ledger.participant.state.kvutils.InMemoryKVParticipantState
import com.daml.ledger.participant.state.v1.ParticipantId
import com.digitalasset.daml.lf.archive.DarReader
import com.digitalasset.daml_lf_dev.DamlLf.Archive
import com.digitalasset.ledger.api.auth.AuthServiceWildcard
import com.digitalasset.platform.common.logging.NamedLoggerFactory
import com.digitalasset.platform.index.{StandaloneIndexServer, StandaloneIndexerServer}
import com.digitalasset.platform.server.api.authorization.auth.AuthServiceWildcard
import org.slf4j.LoggerFactory

import scala.concurrent.{ExecutionContext, Future}
Expand Down
38 changes: 38 additions & 0 deletions ledger/ledger-api-auth/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Copyright (c) 2019 The DAML Authors. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

load(
"//bazel_tools:scala.bzl",
"da_scala_library",
"da_scala_test_suite",
)

da_scala_library(
name = "ledger-api-auth",
srcs = glob(["src/main/scala/com/digitalasset/ledger/api/auth/**/*.scala"]),
resources = glob(["src/main/resources/**/*"]),
tags = ["maven_coordinates=com.digitalasset.ledger:ledger-api-auth:__VERSION__"],
visibility = [
"//visibility:public",
],
runtime_deps = [],
deps = [
"//daml-lf/data",
"//ledger-api/grpc-definitions:ledger-api-scalapb",
"//ledger-api/rs-grpc-akka",
"//ledger-api/rs-grpc-bridge",
"//ledger/ledger-api-akka",
"//ledger/ledger-api-client",
"//ledger/ledger-api-common",
"//ledger/ledger-api-domain",
"//ledger/ledger-api-scala-logging",
"@maven//:com_typesafe_akka_akka_actor_2_12",
"@maven//:com_typesafe_akka_akka_stream_2_12",
"@maven//:io_grpc_grpc_api",
"@maven//:io_grpc_grpc_context",
"@maven//:io_grpc_grpc_core",
"@maven//:io_grpc_grpc_services",
"@maven//:org_scala_lang_modules_scala_java8_compat_2_12",
"@maven//:org_slf4j_slf4j_api",
],
)
17 changes: 17 additions & 0 deletions ledger/ledger-api-auth/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Ledger API authorization

## General authorization in gRPC

An `Interceptor` reads HTTP headers, and stores relevant information (e.g., claims) in a `Context`.

GRPC services read the stored data from the `Context` in order to validate the requests.

## Authorization in the ledger API

The `AuthService` defines an interface for decoding HTTP headers into `Claims`.

The ledger API server takes an `AuthService` implementation as an argument.

The ledger API server uses a call interceptor and the given `AuthService` implementation to to store decoded `Claims` in the gRPC `Context`.

All ledger API services use the `Claims` to validate their requests.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Copyright (c) 2019 The DAML Authors. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

package com.daml.ledger.participant.state.v1
package com.digitalasset.ledger.api.auth

import java.util.concurrent.CompletionStage

Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
// Copyright (c) 2019 The DAML Authors. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

package com.digitalasset.platform.server.api.authorization.auth
package com.digitalasset.ledger.api.auth

import java.util.concurrent.{CompletableFuture, CompletionStage}

import com.daml.ledger.participant.state.v1.{AuthService, Claims}
import io.grpc.Metadata

/** An AuthService that rejects all calls by always returning an empty set of [[Claims]] */
object AuthServiceNone extends AuthService {
override def decodeMetadata(headers: Metadata): CompletionStage[Claims] = {
CompletableFuture.completedFuture(Claims.empty)
}
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
// Copyright (c) 2019 The DAML Authors. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

package com.digitalasset.platform.server.api.authorization.auth
package com.digitalasset.ledger.api.auth

import java.util.concurrent.{CompletableFuture, CompletionStage}

import com.daml.ledger.participant.state.v1.{AuthService, Claims}
import io.grpc.Metadata

/** An AuthService that matches the value of the `Authorization` HTTP header against
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
// Copyright (c) 2019 The DAML Authors. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

package com.digitalasset.platform.server.api.authorization.auth
package com.digitalasset.ledger.api.auth

import java.util.concurrent.{CompletableFuture, CompletionStage}

import com.daml.ledger.participant.state.v1.{AuthService, Claims}
import io.grpc.Metadata

/** An AuthService that authorizes all calls by always returning a wildcard [[Claims]] */
object AuthServiceWildcard extends AuthService {
override def decodeMetadata(headers: Metadata): CompletionStage[Claims] = {
CompletableFuture.completedFuture(Claims.wildcard)
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Copyright (c) 2019 The DAML Authors. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

package com.daml.ledger.participant.state.v1
package com.digitalasset.ledger.api.auth

import com.digitalasset.daml.lf.data.Ref

Expand Down Expand Up @@ -88,8 +88,8 @@ case class Claims(claims: Seq[Claim]) {
object Claims {

/** A set of [[Claims]] that does not have any authorization */
def empty: Claims = Claims(List.empty[Claim])
val empty = Claims(List.empty[Claim])

/** A set of [[Claims]] that has all possible authorizations */
def wildcard: Claims = Claims(List[Claim](ClaimPublic, ClaimAdmin, ClaimActAsAnyParty))
val wildcard = Claims(List[Claim](ClaimPublic, ClaimAdmin, ClaimActAsAnyParty))
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Copyright (c) 2019 The DAML Authors. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

package com.digitalasset.platform.server.api.authorization
package com.digitalasset.ledger.api.auth.interceptor

import io.grpc.ServerCall

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
// Copyright (c) 2019 The DAML Authors. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

package com.digitalasset.platform.server.api.authorization
package com.digitalasset.ledger.api.auth.interceptor

import com.daml.ledger.participant.state.v1.{AuthService, Claims}
import com.digitalasset.ledger.api.auth.{AuthService, Claims}
import io.grpc.{
Context,
Contexts,
Expand All @@ -23,7 +23,7 @@ import scala.util.{Failure, Success}
* This interceptor uses the given [[AuthService]] to get [[Claims]] for the current request,
* and then stores them in the current [[Context]].
*
* Use [[ApiServiceAuthorization]] to read the claims from the context.
* Use [[com.digitalasset.ledger.api.auth.services.ApiServiceAuthorization]] to read the claims from the context.
* */
class AuthorizationInterceptor(protected val authService: AuthService, ec: ExecutionContext)
extends ServerInterceptor {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
// Copyright (c) 2019 The DAML Authors. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

package com.digitalasset.platform.server.api.authorization.services
package com.digitalasset.ledger.api.auth.services

import com.daml.ledger.participant.state.v1.AuthService
import com.digitalasset.grpc.adapter.utils.DirectExecutionContext
import com.digitalasset.ledger.api.auth.AuthService
import com.digitalasset.ledger.api.v1.active_contracts_service.ActiveContractsServiceGrpc.ActiveContractsService
import com.digitalasset.ledger.api.v1.active_contracts_service.{
ActiveContractsServiceGrpc,
Expand All @@ -13,7 +13,6 @@ import com.digitalasset.ledger.api.v1.active_contracts_service.{
}
import com.digitalasset.platform.api.grpc.GrpcApiService
import com.digitalasset.platform.server.api.ProxyCloseable
import com.digitalasset.platform.server.api.authorization.ApiServiceAuthorization
import io.grpc.ServerServiceDefinition
import io.grpc.stub.StreamObserver
import org.slf4j.{Logger, LoggerFactory}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
// Copyright (c) 2019 The DAML Authors. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

package com.digitalasset.platform.server.api.authorization
package com.digitalasset.ledger.api.auth.services

import com.daml.ledger.participant.state.v1.Claims
import com.digitalasset.ledger.api.auth.Claims
import com.digitalasset.ledger.api.auth.interceptor.AuthorizationInterceptor
import com.digitalasset.ledger.api.v1.transaction_filter.TransactionFilter
import com.digitalasset.platform.server.api.validation.ErrorFactories._
import io.grpc.{Context, StatusRuntimeException}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
// Copyright (c) 2019 The DAML Authors. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

package com.digitalasset.platform.server.api.authorization.services
package com.digitalasset.ledger.api.auth.services

import akka.stream.scaladsl.Source
import com.daml.ledger.participant.state.v1.AuthService
import com.digitalasset.grpc.adapter.utils.DirectExecutionContext
import com.digitalasset.ledger.api.auth.AuthService
import com.digitalasset.ledger.api.v1.command_completion_service.CommandCompletionServiceGrpc.CommandCompletionService
import com.digitalasset.ledger.api.v1.command_completion_service._
import com.digitalasset.platform.api.grpc.GrpcApiService
import com.digitalasset.platform.server.api.ProxyCloseable
import com.digitalasset.platform.server.api.authorization.ApiServiceAuthorization
import com.digitalasset.platform.server.api.services.grpc.GrpcCommandCompletionService
import io.grpc.ServerServiceDefinition
import io.grpc.stub.StreamObserver
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,14 @@
// Copyright (c) 2019 The DAML Authors. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

package com.digitalasset.platform.server.api.authorization.services
package com.digitalasset.ledger.api.auth.services

import com.daml.ledger.participant.state.v1.AuthService
import com.digitalasset.grpc.adapter.utils.DirectExecutionContext
import com.digitalasset.ledger.api.auth.AuthService
import com.digitalasset.ledger.api.v1.command_service.CommandServiceGrpc.CommandService
import com.digitalasset.ledger.api.v1.command_service.{
CommandServiceGrpc,
SubmitAndWaitForTransactionIdResponse,
SubmitAndWaitForTransactionResponse,
SubmitAndWaitForTransactionTreeResponse,
SubmitAndWaitRequest
}
import com.digitalasset.ledger.api.v1.command_service._
import com.digitalasset.platform.api.grpc.GrpcApiService
import com.digitalasset.platform.server.api.ProxyCloseable
import com.digitalasset.platform.server.api.authorization.ApiServiceAuthorization
import com.google.protobuf.empty.Empty
import io.grpc.ServerServiceDefinition
import org.slf4j.{Logger, LoggerFactory}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
// Copyright (c) 2019 The DAML Authors. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

package com.digitalasset.platform.server.api.authorization.services
package com.digitalasset.ledger.api.auth.services

import com.daml.ledger.participant.state.v1.AuthService
import com.digitalasset.grpc.adapter.utils.DirectExecutionContext
import com.digitalasset.ledger.api.auth.AuthService
import com.digitalasset.ledger.api.v1.command_submission_service.CommandSubmissionServiceGrpc.CommandSubmissionService
import com.digitalasset.ledger.api.v1.command_submission_service._
import com.digitalasset.platform.api.grpc.GrpcApiService
import com.digitalasset.platform.server.api.ProxyCloseable
import com.digitalasset.platform.server.api.authorization.ApiServiceAuthorization
import com.google.protobuf.empty.Empty
import io.grpc.ServerServiceDefinition
import org.slf4j.{Logger, LoggerFactory}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
// Copyright (c) 2019 The DAML Authors. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

package com.digitalasset.platform.server.api.authorization.services
package com.digitalasset.ledger.api.auth.services

import com.daml.ledger.participant.state.v1.AuthService
import com.digitalasset.grpc.adapter.utils.DirectExecutionContext
import com.digitalasset.ledger.api.auth.AuthService
import com.digitalasset.ledger.api.v1.ledger_configuration_service.LedgerConfigurationServiceGrpc.LedgerConfigurationService
import com.digitalasset.ledger.api.v1.ledger_configuration_service._
import com.digitalasset.platform.api.grpc.GrpcApiService
import com.digitalasset.platform.server.api.ProxyCloseable
import com.digitalasset.platform.server.api.authorization.ApiServiceAuthorization
import io.grpc.ServerServiceDefinition
import io.grpc.stub.StreamObserver
import org.slf4j.{Logger, LoggerFactory}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
// Copyright (c) 2019 The DAML Authors. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

package com.digitalasset.platform.server.api.authorization.services
package com.digitalasset.ledger.api.auth.services

import com.daml.ledger.participant.state.v1.AuthService
import com.digitalasset.grpc.adapter.utils.DirectExecutionContext
import com.digitalasset.ledger.api.auth.AuthService
import com.digitalasset.ledger.api.v1.ledger_identity_service.LedgerIdentityServiceGrpc.LedgerIdentityService
import com.digitalasset.ledger.api.v1.ledger_identity_service.{
GetLedgerIdentityRequest,
GetLedgerIdentityResponse,
LedgerIdentityServiceGrpc
}
import com.digitalasset.ledger.api.v1.ledger_identity_service.LedgerIdentityServiceGrpc.LedgerIdentityService
import com.digitalasset.platform.api.grpc.GrpcApiService
import com.digitalasset.platform.server.api.ProxyCloseable
import com.digitalasset.platform.server.api.authorization.ApiServiceAuthorization
import io.grpc.ServerServiceDefinition
import org.slf4j.{Logger, LoggerFactory}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
// Copyright (c) 2019 The DAML Authors. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

package com.digitalasset.platform.server.api.authorization.services
package com.digitalasset.ledger.api.auth.services

import com.daml.ledger.participant.state.v1.AuthService
import com.digitalasset.grpc.adapter.utils.DirectExecutionContext
import com.digitalasset.ledger.api.auth.AuthService
import com.digitalasset.ledger.api.v1.admin.package_management_service.PackageManagementServiceGrpc.PackageManagementService
import com.digitalasset.ledger.api.v1.admin.package_management_service._
import com.digitalasset.platform.api.grpc.GrpcApiService
import com.digitalasset.platform.server.api.ProxyCloseable
import com.digitalasset.platform.server.api.authorization.ApiServiceAuthorization
import io.grpc.ServerServiceDefinition
import org.slf4j.{Logger, LoggerFactory}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
// Copyright (c) 2019 The DAML Authors. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

package com.digitalasset.platform.server.api.authorization.services
package com.digitalasset.ledger.api.auth.services

import com.daml.ledger.participant.state.v1.AuthService
import com.digitalasset.grpc.adapter.utils.DirectExecutionContext
import com.digitalasset.ledger.api.auth.AuthService
import com.digitalasset.ledger.api.v1.package_service.PackageServiceGrpc.PackageService
import com.digitalasset.ledger.api.v1.package_service._
import com.digitalasset.platform.api.grpc.GrpcApiService
import com.digitalasset.platform.server.api.ProxyCloseable
import com.digitalasset.platform.server.api.authorization.ApiServiceAuthorization
import io.grpc.ServerServiceDefinition
import org.slf4j.{Logger, LoggerFactory}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,14 @@
// Copyright (c) 2019 The DAML Authors. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

package com.digitalasset.platform.server.api.authorization.services
package com.digitalasset.ledger.api.auth.services

import com.daml.ledger.participant.state.v1.AuthService
import com.digitalasset.grpc.adapter.utils.DirectExecutionContext
import com.digitalasset.ledger.api.v1.admin.party_management_service.{
AllocatePartyRequest,
AllocatePartyResponse,
GetParticipantIdRequest,
GetParticipantIdResponse,
ListKnownPartiesRequest,
ListKnownPartiesResponse,
PartyManagementServiceGrpc
}
import com.digitalasset.ledger.api.auth.AuthService
import com.digitalasset.ledger.api.v1.admin.party_management_service.PartyManagementServiceGrpc.PartyManagementService
import com.digitalasset.ledger.api.v1.admin.party_management_service._
import com.digitalasset.platform.api.grpc.GrpcApiService
import com.digitalasset.platform.server.api.ProxyCloseable
import com.digitalasset.platform.server.api.authorization.ApiServiceAuthorization
import io.grpc.ServerServiceDefinition
import org.slf4j.{Logger, LoggerFactory}

Expand Down
Loading

0 comments on commit e887318

Please sign in to comment.