Quién puede leer un elemento
La lista de control de acceso, la identidad de la aplicación firmada, y el diálogo de autorización: cómo decide macOS si tu programa puede leer un secreto que él mismo guardó.
La lista de control de acceso
Cada elemento lleva, junto a sus atributos, una lista de qué programas pueden hacer qué con él. Cuando tu aplicación guarda un secreto, el sistema pone por omisión una entrada: ella misma.
Y cuando alguien pide leer:
El caso bueno no tiene diálogo. Si tu aplicación guardó el secreto y sigue siendo la misma aplicación, lee sin interrumpir a nadie. El diálogo aparece cuando quien pide no es quien guardó, y eso ocurre en dos situaciones: otro programa —que es la protección funcionando— o tu propia aplicación con otra identidad, que es el problema del nivel 35.3.
Cómo identifica macOS a un programa
Y aquí está la diferencia con los otros dos sistemas. No es la ruta —mover la aplicación no cambia nada— ni el nombre, sino una designación derivada de la firma de código: quién la firmó y con qué identificador.
El diálogo, y sus tres botones
Cuando aparece, el usuario ve el nombre del programa, el nombre del elemento y tres opciones. Merece saber qué hace cada una porque determina si vuelve:
- Permitir siempre — añade esa identidad a la lista del elemento. No vuelve a preguntar para ese elemento y ese programa. Es lo que quieres que pulse.
- Permitir — deja pasar esta vez y no cambia la lista. Vuelve a preguntar la próxima, y ésta es la que pulsa la gente con prisa; de ahí las quejas de «me pregunta siempre».
- Denegar — falla la llamada. Tu código tiene que tratarlo como un resultado posible, no como un error inesperado.
Y el tercero conviene tratarlo bien: si el usuario deniega, lo correcto no es reintentar —vuelve a salir el diálogo, y eso es acoso— sino comportarse como si no hubiera secreto: pedir credenciales otra vez, o entrar en modo sin sesión.
Diseñar para que no aparezca
Cuatro reglas, y con ellas el diálogo prácticamente desaparece:
La segunda tiene un matiz de la fase V: tener el secreto en memoria del core es aceptable —es el mismo proceso que lo leyó— y sigue sin cruzar el puente. Lo que no vale es tenerlo en el frontend, que era el nivel 34.5.