In the IOS XE TACACS+ lab I built an ISE Device Admin policy with an admin group, a help desk group and command sets. This post points a Cisco ASA firewall at the same policy and looks at what is different on the ASA side: how it gets to privilege 15, how command authorization is turned on, and how the LOCAL fallback behaves when ISE stops answering.
Four results, all from real sessions:
- Admin
na-01logs in at privilege 15 with noenableand can enter configuration mode. - Help desk
hd-11can runshow versionbut getsCommand authorization failedforshow running-configandconfigure terminal. - Console lockout: turning on command authorization locked out a local admin who doesn't exist in ISE. ISE logged 22056 Subject not found.
- Fault: a wrong shared secret produced 13011, the ASA marked ISE
FAILED, and only then did the local fallback user get in.
I built this in my home lab with Cisco ISE 3.5.0.527 and a Cisco ASAv 9.24(1) (ASDM 7.24(1)), managed over SSH from a Linux jump host. All output is real. Addresses are documentation values, and secrets and passwords are placeholders.
For the theory, see AAA, TACACS+ and RADIUS for Device Administration. If ISE isn't installed yet, start with Cisco ISE 3.5 Initial Setup.
Topology
| Device | Role | Address |
|---|---|---|
| ise35 | Cisco ISE 3.5, Device Admin (TACACS+) | 192.0.2.10 |
| edge-fw7 | Cisco ASAv 9.24(1), management interface | 10.86.249.10 |
| ops-71 | Linux jump host for SSH | 10.86.249.21 |

TACACS+ runs on TCP 49 from the ASA management interface to ISE.
| User | Where it lives | Expected result |
|---|---|---|
| na-01 | ISE, group NetOps-Admins | Privilege 15, every command |
| hd-11 | ISE, group NetOps-Helpdesk | Privilege 15, read-only commands |
| fw-local | ASA local database only | Emergency access when ISE is down |
Step 1: Reuse the ISE Device Admin policy
Nothing new was needed in ISE except the network device. The IOS-Device-Admin policy set from the IOS XE lab matches on DEVICE:Device Type EQUALS All Device Types, so it matched the ASA as it was:
| Rule | Condition | Command set | Shell profile |
|---|---|---|---|
| NetOps-Admins-Priv15 | IdentityGroup NetOps-Admins | CS-Permit-All | IOS_Priv15 |
| NetOps-Helpdesk-ReadOnly | IdentityGroup NetOps-Helpdesk | CS-Helpdesk-Show | IOS_Priv15 |
| Default | (none) | DenyAllCommands | Deny All Shell Profile |
CS-Helpdesk-Show has a DENY_ALWAYS rule for show running-config.* and PERMIT rules for show, ping, traceroute, terminal length and exit. Everything else is denied.
That reuse is convenient, but it's also a warning. A policy set matching All Device Types catches every TACACS+ device you add, firewalls included. If firewalls should get a different policy, give them their own Network Device Group and policy set. The next post in this series covers policy sets by device type.
Add the ASA under Administration > Network Resources > Network Devices: name edge-fw7, IP 10.86.249.10, and under TACACS Authentication Settings a shared secret (<TACACS_KEY> here).
Step 2: ASA configuration
aaa-server ISE-TAC protocol tacacs+
aaa-server ISE-TAC (management) host 192.0.2.10
key <TACACS_KEY>
!
username fw-local password <LOCAL_PASSWORD> privilege 15
!
aaa authentication ssh console ISE-TAC LOCAL
aaa authentication enable console LOCAL
aaa authorization exec authentication-server auto-enable
aaa authorization command ISE-TAC LOCAL
aaa accounting command ISE-TAC
What each line does:
aaa authentication ssh console ISE-TAC LOCALsends SSH logins to ISE and uses the local database only if the ISE server group is unavailable.aaa authorization exec authentication-server auto-enableapplies the privilege level from the ISE shell profile (IOS_Priv15) and drops the user straight into privileged mode, with noenableprompt.aaa authorization command ISE-TAC LOCALsends every command to ISE for a permit or deny decision.aaa accounting command ISE-TACrecords each command in ISE.
On ASA 9.24, a newly created local user has to change its password at first login. Plan for that before you depend on fw-local in an outage.
Step 3: Admin login
User na-01 logged in to edge-fw7
edge-fw7# show curpriv
Username : na-01
Current privilege level : 15
Current Mode/s : P_PRIV
edge-fw7# configure terminal
edge-fw7(config)# exit
There's no enable prompt: auto-enable placed na-01 in privileged mode at level 15.
Step 4: Help desk login
User hd-11 logged in to edge-fw7
edge-fw7# show curpriv
Username : hd-11
Current privilege level : 15
Current Mode/s : P_PRIV
edge-fw7# show version | include Software
Cisco Adaptive Security Appliance Software Version 9.24(1)
edge-fw7# show running-config
Command authorization failed
edge-fw7# configure terminal
Command authorization failed
hd-11 is also at privilege 15, but every command still goes to ISE. show running-config hit the DENY_ALWAYS rule:

Both users and their command decisions show up in Operations > TACACS > Live Logs:

Step 5: The console lockout
Right after I entered aaa authorization command ISE-TAC LOCAL, my next command on the serial console was rejected. Command authorization applies to the console as well as SSH, and the console session belonged to a local admin that doesn't exist in ISE. The ASA asked ISE to authorize the command, ISE couldn't find the user, and the ASA used that reject as final.

That's the key point about the fallback: LOCAL is used only when the server group can't be reached, not when ISE says no. A reject from ISE is a valid answer.
To avoid locking yourself out:
- Log in as an ISE user, such as na-01, before turning on command authorization, and keep that session open.
- Don't rely on a local-only account while ISE is reachable.
- Save the configuration only after you've tested a fresh login.
Step 6: Fault, a wrong shared secret
I changed the shared secret on the ISE network device so it no longer matched the ASA. The next login attempt failed:
$ ssh hd-11@10.86.249.10
Permission denied, please try again.
ISE logged 13011 Invalid TACACS+ request packet - possibly mismatched Shared Secrets, with no username, because it couldn't decrypt the packet:

The ASA marked the server as failed, and only then did the local fallback user get in:
User fw-local logged in to edge-fw7
edge-fw7# show curpriv
Username : fw-local
Current privilege level : 15
edge-fw7# show aaa-server ISE-TAC
Server Group: ISE-TAC
Server Protocol: tacacs+
Server Address: 192.0.2.10
Server port: 49
Server status: FAILED, Server disabled at 15:01:14 UTC Sat Oct 31 2026
...
Number of rejects 5
Number of timeouts 3
The fix, and the 10-minute wait
I put the correct secret back in ISE and ran aaa-server ISE-TAC active host 192.0.2.10. Logins still failed for about ten minutes. The group stayed in its failed state for the depletion deadtime (10 minutes by default), so the ASA kept using LOCAL, and the ISE users aren't in LOCAL. Once the group recovered, na-01 and hd-11 worked again and fw-local was rejected by ISE with 22056, as in step 5.
edge-fw7# show aaa-server ISE-TAC
Server status: ACTIVE, Last transaction at 15:25:43 UTC Sat Oct 31 2026
If you need faster recovery during a change window, lower the deadtime with reactivation-mode depletion deadtime <minutes> under the server group, or use reactivation-mode timed.
Failure codes seen
| Code / message | Where | Meaning | Fix |
|---|---|---|---|
| 13023 Command matched a Deny-Always rule | ISE | DENY_ALWAYS in the command set | Working as designed |
Command authorization failed |
ASA CLI | ISE denied the command | Check the TACACS Live Logs row for the reason |
| 22056 Subject not found | ISE | User not in any identity store (for example a local-only admin) | Use an ISE user, or add the user to ISE |
| 13011 Invalid TACACS+ request packet | ISE | Shared secret mismatch | Match the key on the ASA and the network device |
FAILED, Server disabled |
ASA show aaa-server |
Group unreachable or erroring | Fix the cause, then wait for deadtime or reactivate |
Takeaways
- The ASA needs
aaa authorization exec authentication-server auto-enableto use the ISE shell profile privilege without anenableprompt. - Command authorization covers the console too. Test from an ISE account before you turn it on.
LOCALfallback works only while the server group is down. An ISE reject is final.- After an outage, the group can stay on
LOCALfor the deadtime even once ISE is healthy. - A policy set matching All Device Types catches firewalls as well as routers. Split it by device type if they need different rules.
Related: TACACS+ for Cisco IOS XE with ISE 3.5 and ISE Live Logs failure codes.