---
title:  Security&#58; Authentication and Encryption
---

<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

Most security configuration takes place on the <%=vars.product_name%> server. The server's security
framework authenticates clients as they connect to a cache server and authorizes client cache
operations using developer-provided implementations for authentication and authorization.

For an explanation of the server-side implementation of security features, 
see [Security](geodeman/managing/security/chapter_overview.html) in the *<%=vars.product_name%> User Guide*.

A Native Client application must address two security concerns when connecting to a <%=vars.product_name%> server: 

-   **[Authentication](authentication.html)**

    The Client must submit its authentication credentials to the server using the developer-provided authentication implementation expected by the server.

-   **[TLS/SSL Client/Server Communication Encryption](sslclientserver.html)**

    Communication between client and server should be encrypted so authentication credentials and other transmissions cannot be viewed by third-parties.

